Ir para conteúdo

Tutorial Básico Movements


DuuhCarvalho

Posts Recomendados

Amigos o OTScritp Live! é muito ultrapassado... Sugiro fortemente que usem esse (é o mesmo que uso)

 

http://www.xtibia.com/forum/topic/226388-scripting-otm-ot-manager/

 

Ele não é completamente atualizado e faltam algumas funções, mas já ajuda muito.

 

Muito Foda ! ..

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

muito bom :D 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 .

Link para o comentário
Compartilhar em outros sites

  • 2 months later...
Em 17/03/2014 at 12:23, pprgfpedro disse:

muito bom :D 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 por Everson Miranda
Link para o comentário
Compartilhar em outros sites

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?

 

 

Link para o comentário
Compartilhar em outros sites

Spoiler
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

 

  Ocultar conteúdo

 

 


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

 

  Ocultar conteúdo

 

 


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

 

  Mostrar conteúdo oculto

<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?

 

 

 

 

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:

Spoiler
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 por Ed'Specter
Link para o comentário
Compartilhar em outros sites

29 minutos atrás, Ed'Specter disse:
  Ocultar conteúdo
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

 

 

 

 

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 por CalistoKing
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...