BL
pedido

Sistema De Key Number + Estatua

Por BlackLeft, 07 de jun. de 2012 em Scripts

dou + rep eim (:
script
26
5.3k
BlackLeftB
07 de junho de 2012 às 12:05

Gostaria muito que alguem podesse mim ajudar nessa script de key, ela fuciona assim, keys do mesmo id soque com numeros diferentes:

 

Segue a imagem abaixo como exemplo:

sistemakey.png

 

 

agora caso eu tenha a key 666 eu usaria ela na estatua e seria telportado para tal lugar

Mas lembre-se que a estatua só pode fucionar caso eu tenha a key 666

 

 

Caso eu tenha a key 3070 eu usaria ela em outra estatua e seria teleportado para um lugar, e a key seria removida da minha bp.

Mas lembre-se que a estatua só pode fucionar caso eu tenha a key 3070

 

Vlw ae.

Espero que alguem de vcs consigam fazer, e se tiverem alguma duvida é so falar.

LeoxtibiaL
07 de junho de 2012 às 13:05

Talvez esse tópico te ajude: http://www.xtibia.com/forum/topic/134869-action-estatua-que-teleporta-o-player-apenas-se-ele-tiver-x-item/

Dá olhada aí =P

BlackLeftB
07 de junho de 2012 às 13:39

Realmente ele pode mim ajudar, mais teria que editar pra ser uma chave, com tal numero nela entendeu ?

LeoxtibiaL
07 de junho de 2012 às 13:55

Qual o id dessa chave numero 666?

BlackLeftB
07 de junho de 2012 às 14:27

o id das duas chaves é 2091

OneshotO
07 de junho de 2012 às 23:08

Vasculhei os arquivos items.cpp de algumas revisões de Open Tibia que tenho aqui e não achei nenhum atributo relacionado com números de chaves.

 

Como provavelmente você está querendo mais alguma coisa do Bronson Server, creio que isso deve ser algo extra, mas até simples de fazer em C++.

Editado Junho 7 por Oneshot

BlackLeftB
07 de junho de 2012 às 23:49

Oneshot

 

Se vc conseguir fazer em c++ não tem problema, eu faria muito grato.

e sim tem bastante coisa pra copiar ainda, é so voce ver ae nos topicos.

Mais ae se é simples essa script pode fazer em c++ que fico muito grato.

 

Vlw (:

bepokemonB
08 de junho de 2012 às 00:10

Galere, na minha época a key numer era de acordo com o ActionID da mesma. Se colocar action ID 666 ela vai ser Key: 666 e vai abrir portas com o actionid 666 ou 1666 (Não lembro.). Boa sorte.

BlackLeftB
08 de junho de 2012 às 00:14

hm... muito obrigado por essa informção, Realmente faz sentido.

 

você poderia explicar melhor como fuciona ?

LeoxtibiaL
08 de junho de 2012 às 09:54
Byerne disse,

Galere, na minha época a key numer era de acordo com o ActionID da mesma. Se colocar action ID 666 ela vai ser Key: 666 e vai abrir portas com o actionid 666 ou 1666 (Não lembro.). Boa sorte.

 

Ainda é assim...A action id é igual ao número da key.

OneshotO
08 de junho de 2012 às 10:00

Galere, na minha época a key numer era de acordo com o ActionID da mesma. Se colocar action ID 666 ela vai ser Key: 666 e vai abrir portas com o actionid 666 ou 1666 (Não lembro.). Boa sorte.

 

Sério mesmo? Achei que era um atributo de item a parte. Se for assim do jeito que você falou, tudo fica mais simples. Segue abaixo um esboço do que seria o funcionamento da chave.

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
return (item.actionid == itemEx.actionid and doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "A chave abriu a porta ") or doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "A chave não encaixa na fechadura."))
end

 


 

Falha nossa, de fato a actionid vira mesmo key number, como visto no items.cpp.

 

else if(it.isKey())
	s << " (Key:" << (item ? (int32_t)item->getActionId() : 0) << ")";

Editado Junho 8 por Oneshot

LeoxtibiaL
08 de junho de 2012 às 10:30
OneShot disse,

Sério mesmo? Achei que era um atributo de item a parte. Se for assim do jeito que você falou, tudo fica mais simples. Segue abaixo um esboço do que seria o funcionamento da chave.

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

return (item.actionid == itemEx.actionid and doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "A chave abriu a porta :)") or doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "A chave não encaixa na fechadura."))

end

Ta aí a deixa então =P To começando a scripting ainda.. mas acho que o script deve funcionar. É só dar use com a chave na estátua =P

 

Crie um arquivo em actions>scripts e coloque isto dentro:

 

function onUse(cid, item, fromPosition, item2, toPosition)
teleport = {x=100, y=40, z=7}  -- posição do teleport
idkey = 2091 --- id da key
if getPlayerItemCount(cid,idkey) >= 1 then
if item.itemid == 2091 then
if item.actionid == item2.actionid then
doPlayerRemoveItem(cid,idkey,1)
doTeleportThing(cid, teleport)
doSendMagicEffect(getPlayerPosition(cid), 10)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce foi teleportado!")
end
end
end  
end  

 

Em actions.xml, adicione:

<action actionid="XXXX" event="script" value="nomedoseuarquivo.lua"/>

Em XXXX, coloque o actionid da estátua que deve ser igual ao do número da key. Vlw, abraços!

Editado Junho 8 por Leoxtibia

BlackLeftB
08 de junho de 2012 às 11:25

eu não entendi direito essa script, tipo como é que vai ficar com o numero la 666 na key ?

 

manda seu msn para conversamos melhor.

 

 

@edit

 

Eu acho que só da para fazer oque eu pedir pelas sources mesmo, por causa que eu vou usar numeres key iguais (mesmo id) soque com o numero da key diferente...

 

Tipo Id Da key: 2091

11:50 You see a golden key (Key:666).

It weighs 1.00 oz.

 

Outra do mesmo jeito

Id Da key:2091

11:50 You see a golden key (Key:3050).

It weighs 1.00 oz.

 

é isso que eu procuro.

 

Dai dps que essa script tiver pronta, faria a da estatua por key number.

Editado Junho 8 por BlackLeft

LeoxtibiaL
08 de junho de 2012 às 12:06

Então você poderia criar essas chaves por um baú, taí o script:

Crie em actions>scripts um arquivo.lua e coloque isso nele:

function onUse(cid, item, frompos, item2, topos)
	queststatus = getPlayerStorageValue(cid,2357)
	if queststatus == -1 then
			local key = doPlayerAddItem(cid,2091,1)
			doItemSetAttribute(key, "aid", 666)
			doPlayerSendCancel(cid,'You have found a Golden key!  Number 666.')
			setPlayerStorageValue(cid,2357,1)
	else
			doPlayerSendCancel(cid,'This chest is Empty')
	end
	return true
end

Aqui em doItemSetAttribute(key, "aid", 666) -- Em vermelho é o Key Number da sua chave

 

Em actions.xml coloque a tag:

 

<action actionid="XXXX" event="script" value="nomedoseuarquivo.lua"/>

 

Em XXXX você coloca a actionid do baú, aí é so fazer a mesma coisa para o outro número da key.Lembrando de mudar o 2357, que é o storage. Abraço!

Editado Junho 8 por Leoxtibia

bepokemonB
08 de junho de 2012 às 12:18

Este fragmento do doors.lua mostra o funcionamento das chaves.

if(isInArray(keys, item.itemid)) then
if(itemEx.actionid > 0) then
if(item.actionid == itemEx.actionid and doors[itemEx.itemid] ~= nil) then
doTransformItem(itemEx.uid, doors[itemEx.itemid])
return true
end

doPlayerSendCancel(cid, "The key does not match.")
return true
end

return false
end