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 ?
- Fórum
- OTServ
- Tutoriais
- Tutoriais de Scripting
- Tutorial Básico Movements
Tutorial Básico Movements
Por DuuhCarvalho, 15 de fev. de 2014 em Tutoriais de Scripting
info
Grupo: Campones
Registrado: 01/09/12
Posts: 41
Reputação: +1
Char no Tibia: nemon irismansher

info
Grupo: Conde
Registrado: 18/01/12
Posts: 988
Reputação: +327
Gênero: Masculino
Char no Tibia: 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
Grupo: Conde
Registrado: 18/01/12
Posts: 988
Reputação: +327
Gênero: Masculino
Char no Tibia: 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
Grupo: Campones
Registrado: 23/04/17
Posts: 17
Reputação: +2
Gênero: Masculino
Char no Tibia: 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..
Editado Abril 26 por Everson Miranda
info
Grupo: Campones
Registrado: 11/04/15
Posts: 85
Reputação: +17
Gênero: 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
Grupo: Conde
Registrado: 18/01/12
Posts: 988
Reputação: +327
Gênero: Masculino
Char no Tibia: 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
Editado Abril 26 por Ed'Specter
info
Grupo: Campones
Registrado: 11/04/15
Posts: 85
Reputação: +17
Gênero: 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.
Editado Abril 26 por CalistoKing


info
Grupo: Conde
Registrado: 18/01/12
Posts: 988
Reputação: +327
Gênero: Masculino
Char no Tibia: Xerife Woody
Muito Foda ! ..