Ir para conteúdo
  • 0

Duvida Script


448055

Pergunta

Aew Pessoal beleza Entao Vamos direto ao ponto hoje estou aki para pedir a ajuda de voces para corrigir meu script para ver se esta certo ou falta alguma coisa Tipo essas coisas como eu sou iniciante ainda estou produzindo scripts basicos para treinar e vo começar a postar alguns scripts aki para alguem ver ou me corrigir se fis alguma coisa de errado mais vamos ao que intereça vo postar o script aki e se tiver alguma coisa errada voces falam criticas aceito tudo '-'

function onStepIn(cid, item, frompos, item2, topos)
local pos = {x=160, y=69, z=7}
local Tele = {x=160, y=54, z=7}
if getCreaturePosition(cid) == pos then
doPlayerSendTextMessage(cid,22, "Voce Achou Um Bug Nao Fale Pra Ninguem")
doPlayerAddItem(cid,2160,100)
doTeleportThing(cid,tele)
end
else
return true
end

agora uma duvida se estiver certo o script que fis ai aomde eu devo por ?? actions ?? creaturescripts qual local ?? éssa tbm é uma duvida ou dificuldade minha mais com o decorrer do tempo acho que ja vou ter pegado o jeito tai entao espero Comentarios Se possivel da 1 rep+ pelo esforço apenas se kiser '-' ninguem é obrigado a nada ;D

Nao é por nada mais acho que falto o Storage '-' mais eu nao usei pq quero que ele pegue quantas vezes quiser '-'

 

@EDIT

Sera que agora ta certo eu fis uma coisa diferente '-' Com o Exemplo de Dalvorsn

 

function onStepIn(cid, item, frompos, item2, topos)
local p = getCreaturePosition(cid)
local pos = {x=160, y=69, z=7}
local Tele = {x=160, y=54, z=7}
if p.x == pos.x and p.y == pos.y and p.z == pos.z then
if getPlayerStorageValue(cid,16592) == -1 then
doPlayerSendTextMessage(cid,22, "Voce Achou Um Bug Nao Fale Pra Ninguem")
doPlayerAddItem(cid,2160,100)
doTeleportThing(cid,Tele)
setPlayerStorageValue(cid,16592,1)
else
doPlayerSendTextMessage(cid,22, " Voce Ja Pizou Uma ves")
end
else
return true
end
end


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

13 respostass a esta questão

Posts Recomendados

  • 0

Tem alguns erros, e algumas coisas desnecessárias.

mF7VUE2Z[/pastebin]

 

Primeira coisa, identação é de suma importância, adquira esse habito.

 

Bom, existem erros lógicos e de sintaxe.

1º erro lógico:

if getCreaturePosition(cid) == pos then

Positions são do tipo table, quando compara uma tabela com outra através do metametodo __eq(==) você está comparando seus endereços na memoria, e não seus valores.

o correto seria:

local p = getCreaturePosition(cid)
if p.x == pos.x and p.y == pos.y and p.z == pos.z then

 

2º erro lógico:

doTeleportThing(cid,tele)

Lua é case-sensitivy, a variavel 'tele' não foi previamente declara, e sim 'Tele'. Lembre-se: "Lua diferencia maiusculas de minusculas"

Correção:

doTeleportThing(cid,Tele)

 

1º erro sintatico:

Na linha 10 tem um else perdido, não entendi bem o que tu queria fazer

else só podem ser usados dentro do bloco de um if ou elseif, e deve-se ter um end ao final do bloco desse else

if true then
-- bloco if
elseif false then
-- bloco elseif
else
  -- bloco else
end

--ou
if true then
-- bloco if
else
-- bloco do else
end

--ou
if true then
  --bloco do if
elseif false then
  -- bloco do elseif
end

Obs.: o elseif pode ser repetido varias vezes, o if e o else não

 

 

onStepIn é um move event, voce coloca em movements x.x

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

  • 0

Obrigado Por me corrigir davorsn Rep+ pra voce por me corrigir e ensinar '-'

 

@EDIT

 

Só nao entendi oque é identaçao '-'

 

E nessa parte nao intendi muito bem como funciona os codigos

 

local p = getCreaturePosition(cid)
	if p.x == pos.x and p.y == pos.y and p.z == pos.z then

 

Oque esta querendo dizer Voce ja ganho o rep+ só nao intendi éssa parte oque quer dizer esses codigos

 

dalvorsn

 

'-'

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

  • 0

dlavorson.. sua correção até está certa mas o que vc falou sobre tabelas nao está..

para uma tabela ser igual a outra, basta terem TODOS os valores iguais.. (nenhum valor a mais ou a menos)

 

exemplo

{x = 10,y , 20,z = 30} == {x = 10,y , 20,z = 30} retorna verdadeiro porem

{x = 10,y , 20,z = 30} == {x = 10,y , 20} retorna falso...

 

o unico problema la em questão seria a stackpos ^^

Link para o comentário
Compartilhar em outros sites

  • 0

dlavorson.. sua correção até está certa mas o que vc falou sobre tabelas nao está..

para uma tabela ser igual a outra, basta terem TODOS os valores iguais.. (nenhum valor a mais ou a menos)

 

exemplo

{x = 10,y , 20,z = 30} == {x = 10,y , 20,z = 30} retorna verdadeiro porem

{x = 10,y , 20,z = 30} == {x = 10,y , 20} retorna falso...

 

o unico problema la em questão seria a stackpos ^^

 

Tu ta viajando ...

Faz o seguinte, executa isso:

local newTable = {1,2,5,33}
print(newTable)

O que vai printar é um algo como: 'table: 0x000A3'

A variavel que guarda a tabela, não guarda os seus valores, e sim um endereço de memoria, e não seus valores. E a menos que você edite atraves da função setmetatable o metametodo __eq para fazer a comparação dos elementos da tabela, ela vai compara é os endereços, pois é isso que a variavel grava para tabelas

 

@EDIT

Só nao entendi oque é identaçao '-'

É esse espaçamento de tabulação que se dá no código, ele ajuda a definir onde iniciam e terminam os blocos, e deixa mais organizado.

Joga no google para mais detalhes

 

E nessa parte nao intendi muito bem como funciona os codigos

 

local p = getCreaturePosition(cid)
	if p.x == pos.x and p.y == pos.y and p.z == pos.z then

 

Oque esta querendo dizer Voce ja ganho o rep+ só nao intendi éssa parte oque quer dizer esses codigos

 

dalvorsn

 

'-'

 

Bom, com oeu disse, position é uma tabela. Para acessa elementos de uma tabela você pode fazer das seguintes formas:

-- atraves da função rawget que não invoca metametodos
rawget(table, index)

-- atraves do metametodo __index
-- forma padrão:
table[index]
-- sintax suggar
table.index

 

Bom, como pode ver acima, ao usar p.x você acessa o index x da tabela p, e pos.x é a mesma coisa

Traduzindo o if a uma definição logica, seria mais ou menos assim:

"Se o index x da tabela p for igual ao index x da tabela pos e o index y da tabela p for igual ao index y da tabela pos e o index z da tabela p for igual ao index z da tabela pos então execute esse bloco:"

Link para o comentário
Compartilhar em outros sites

  • 0

Olhem lah ve se Agora esta certo

 

A parte de lua está corretissima, só faltou a indentação.

Só tem uma especificidade do tfs/opentibia que é quanto ao return aos callbacks, eles geralmente tem alguma função. No caso do onStepIn não notei nenhum, mas fique atento a outros principalmente as creature scripts

Link para o comentário
Compartilhar em outros sites

  • 0

Entao se eu executar esse script no otserver vai pegar Eu acho '-' Presisa registrar ?? no Movements.xml ? Acho que sim '-' kk

Sim precisa, e com type stepin, alem disso tem que usar um identificador que pode ser tanto uma posição, como um itemid, quanto um actionid ou uniqueid(acho que é só, preguiça de ver nas sources se tem mais >.<)

Link para o comentário
Compartilhar em outros sites

  • 0

Ficou assim no Movements.xml

 

<!-- Piza Num pizo e ganha 1kk -->
    <movevent type="StepIn" itemid="16592" event="script" value="bugue.lua"/>

 

 

 

eu ponhei o nome de bugue.lua '-' kk

 

Acho que é isso

 

Aewww Deu certoo '-' TY A todos

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...