muito bom
so explica algo tipo essa parte do piso bom si tive um negoco asim se pisa em um piso aparece um monstro de cada vez ele mata o monstro ai pisa denovo aparece ai quando pisa 30 veses ele sair e i pro templo como fasso isso ?
- Forums
- OTServ
- Tutoriais
- Tutoriais de Scripting
- Tutorial Básico Movements
Tutorial Básico Movements
By DuuhCarvalho, 15 de fev. de 2014 in Tutoriais de Scripting
info
Group: Campones
Joined: 01/09/12
Posts: 41
Reputation: +1
Tibia Character: nemon irismansher

info
Group: Conde
Joined: 18/01/12
Posts: 988
Reputation: +327
Gender: Masculino
Tibia Character: Xerife Woody

muito bom
so explica algo tipo essa parte do piso bom si tive um negoco asim se pisa em um piso aparece um monstro de cada vez ele mata o monstro ai pisa denovo aparece ai quando pisa 30 veses ele sair e i pro templo como fasso isso ?
não entendi . se isso é um pedido use a área de pedidos e duvidas de scripting .
info
Group: Conde
Joined: 18/01/12
Posts: 988
Reputation: +327
Gender: Masculino
Tibia Character: Xerife Woody

# Editei a estrutura deste tópico e dei um up, é um tutorial bem básico, mas que pode ajudar quem está iniciando.
info
Group: Campones
Joined: 23/04/17
Posts: 17
Reputation: +2
Gender: Masculino
Tibia Character: Ever Hellraiser

Em 17/03/2014 at 12:23, pprgfpedro disse:muito bom
so explica algo tipo essa parte do piso bom si tive um negoco asim se pisa em um piso aparece um monstro de cada vez ele mata o monstro ai pisa denovo aparece ai quando pisa 30 veses ele sair e i pro templo como fasso isso ?
eu entendi.. eu nao entendo muito de lua.. mas no C++ se usa o return e uma variavel de verificação em cima
ex:
function onStepIn(cid, item, pos)if isPlayer(cid) then if getPlayerStorageValue(cid, 54321) <= 30 then doPlayerAddItem(cid, 2160, 100)elseif getPlayerStorageValue(cid, 54321) == 30 then doPlayerTeleport (x, y , z) elseif getPlayerStorageValue(cid, 54321) == 31 then doPlayerSendCancel(cid, "Você já fez essa quest!") endendreturn trueend
Nao sei se esta correto porem essa é +- a ideia dele, so que ao inves de grana ele quer que apareça monstros... tipo task..
Edited Abril 26 by Everson Miranda
info
Group: Campones
Joined: 11/04/15
Posts: 85
Reputation: +17
Gender: Masculino

Belo tutorial eu entendi basicamente tudo, só que quando fui tentar fazer o script não entendi por que o storage não funcionou quando pisava no tile ![]()
Como era para funcionar
Você pisa em um X Tile oque acontece : Você recebe um x storage, recebe uma mensagem e o monstro nasce em x localização.
Você tenta pisar novamente oque acontece : Você recebe a mensagem que não pode mais respawnar o monstro.
Script
function onStepIn(cid, item, pos)
if getPlayerStorageValue(cid, 4445) then
doPlayerSendTextMessage(cid, 25, "Você já summonou o Frenzy Boar!")
end
if isPlayer(cid) then
if getTileThingByPos(cid, {x=1111,y=1030,z=7}) then
doCreateMonster("Frenzy Boar", {x=1111,y=1031,z=7})
setPlayerStorageValue(cid, 4445)
doPlayerSendTextMessage(cid, 25, "Você summonou um Frenzy Boar!")
end
end
return true
end
No movements.xml
<movevent type="StepIn" uniqueid="15667" event="script" value="piso.lua"/>
Oque acontece
O script funciona pra summonar o monstro e receber a mensagem que nasceu, mas na parte da storage que era para verificar não sei oque está acontecendo que continua a summonar.
Oque a de errado no script?
info
Group: Conde
Joined: 18/01/12
Posts: 988
Reputation: +327
Gender: Masculino
Tibia Character: Xerife Woody

33 minutos atrás, CalistoKing disse:Belo tutorial eu entendi basicamente tudo, só que quando fui tentar fazer o script não entendi por que o storage não funcionou quando pisava no tile
Como era para funcionar
Você pisa em um X Tile oque acontece : Você recebe um x storage, recebe uma mensagem e o monstro nasce em x localização.
Você tenta pisar novamente oque acontece : Você recebe a mensagem que não pode mais respawnar o monstro.
Script
function onStepIn(cid, item, pos)
if getPlayerStorageValue(cid, 4445) then
doPlayerSendTextMessage(cid, 25, "Você já summonou o Frenzy Boar!")
end
if isPlayer(cid) then
if getTileThingByPos(cid, {x=1111,y=1030,z=7}) then
doCreateMonster("Frenzy Boar", {x=1111,y=1031,z=7})
setPlayerStorageValue(cid, 4445)
doPlayerSendTextMessage(cid, 25, "Você summonou um Frenzy Boar!")
end
end
return true
end
No movements.xml
Oque acontece
O script funciona pra summonar o monstro e receber a mensagem que nasceu, mas na parte da storage que era para verificar não sei oque está acontecendo que continua a summonar.
Oque a de errado no script?
Muito bom, a questão da storage é que você esqueceu 2 coisinhas:
1º na parte:
setPlayerStorageValue(cid, 4445)
você esqueceu o param de valor, ou seja, o valor que vai ser atribuído a storage 4445.
Exemplo: setPlayerStorageValue(cid, 4445, 1) -- nesse caso foi setado o valor 1 na storage 4445.
2º na checagem:
if getPlayerStorageValue(cid, 4445) then doPlayerSendTextMessage(cid, 25, "Você já summonou o Frenzy Boar!")end
já que eu setei a storage para 1 conforme expliquei acima, eu tenho que checar se o valor da storage é igual a 1.
Exemplo: if getPlayerStorageValue(cid, 4445) == 1 then -- nesse caso se a storage 4445 tiver o valor 1, vai entrar no if.
detalhe para que ele não entre nesse if e depois entre no outro if, utilize um return, exemplo:
if getPlayerStorageValue(cid, 4445) == 1 then return doPlayerSendTextMessage(cid, 25, "Você já summonou o Frenzy Boar!")end
existe também outro possibilidade, que eu prefiro, estude o código abaixo:
function onStepIn(cid, item, pos) if isPlayer(cid) then if getPlayerStorageValue(cid, 4445) ~= 1 then if getTileThingByPos(cid, {x=1111,y=1030,z=7}) then doCreateMonster("Frenzy Boar", {x=1111,y=1031,z=7}) setPlayerStorageValue(cid, 4445, 1) doPlayerSendTextMessage(cid, 25, "Você summonou um Frenzy Boar!") end else doPlayerSendTextMessage(cid, 25, "Você já summonou o Frenzy Boar!") end endreturn trueend lendo o código..
se é player(cid) então se a storage 4445 do player(cid) é diferente de 1 então ... senão --(else) mandar msg Você já summonou o Frenzy Boar fimfim
: D
Edited Abril 26 by Ed'Specter
info
Group: Campones
Joined: 11/04/15
Posts: 85
Reputation: +17
Gender: Masculino

29 minutos atrás, Ed'Specter disse:function onStepIn(cid, item, pos) if isPlayer(cid) then if getPlayerStorageValue(cid, 4445) ~= 1 then if getTileThingByPos(cid, {x=1111,y=1030,z=7}) then doCreateMonster("Frenzy Boar", {x=1111,y=1031,z=7}) setPlayerStorageValue(cid, 4445, 1) doPlayerSendTextMessage(cid, 25, "Você summonou um Frenzy Boar!") end else doPlayerSendTextMessage(cid, 25, "Você já summonou o Frenzy Boar!") end endreturn trueendlendo o código..
se é player(cid) então se a storage 4445 do player(cid) é diferente de 1 então ... senão --(else) mandar msg Você já summonou o Frenzy Boar fimfim
Nossa que brilhante, eu sou iniciante e fiquei um pouco confuso mas entendi que quando colocou o param ele serviu para identificar se o player tinha ou não a storage para setar (4445, 1) e summonar o monstro ou não que no caso seria o else(se já tivesse 4445, 1).
Obrigado, abriu minha mente para diversas coisas, apesar de ser um iniciante e quero trazer bons conteúdo para o fórum, abraço.
Edited Abril 26 by CalistoKing


info
Group: Conde
Joined: 18/01/12
Posts: 988
Reputation: +327
Gender: Masculino
Tibia Character: Xerife Woody
Muito Foda ! ..