Ir para conteúdo
  • 0

Erro em script de Creature script


PsyMcKenzie

Pergunta

Bom galera, estou fazendo um script aqui e estou com uma duvida :/

 

Por exemplo, se o player não fizer tal coisa, ele vai perder life.

 

Já fiz isso, o problema é que o tempo esta sem exausted. Tipo, ele

vai perdendo vida sem parar e muito rápido, alguém sabe como coloco

um tempo determinado pra vida descer?

 

Outra coisa.

O script que estou fazendo, é um creaturescript.

Não sei por que, mas quando eu coloco ele no server, nenhum char loga '-'

Alguém sabe por que faz isso?

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

  • Respostas 38
  • Created
  • Última resposta

Top Posters For This Question

Popular Days

Top Posters For This Question

Posts Recomendados

  • 0

@EDIT

Entendi mano *----------*

 

Você entendeu agora o princípio de condição. Agora vejamos exemplos de condições com funções booleanas*:

 

if isCreature(cid) then

 

Sempre que houver uma função sem um comparador (<, >, ==, etc), significa == true. Ou seja:

 

if isCreature(cid) == true then

 

Se o player for uma criatura, ficaria assim:

 

if true == true then

 

Ai o script prossegue nesse trecho.

 

Retornar significa o valor que a função possui de acordo com as condições.

 

Ou seja, na condição if isCreature(cid) then, se o player for uma criatura, retornará true, ou seja, o valor da função é true, é verdadeiro.

 

Então, o return true é para saber que a função é verdadeira, mais ou menos isso né?

 

Isso. Se o player for uma criatura, a função isCreature retorna true.

 


@EDIT2

 

Entendi *-------------------------------*

Aew porra!

 

Então essa parte não tem return false pois não é booleana, certo?

 

function onLogin(cid)
local tempo = 10
if getPlayerFood(cid) == 0 then
doPlayerFeed(cid, 100)
end
checkFood(cid, tempo)
return true
end

 

Tipo, se o player tiver food = 0, o return true vai mostrar que é verdadeiro e o script vai executar a parte do doPlayerFeed.

 

Então, não precisa de return false, porque se isso não acontecer, nao pode acontecer outra coisa, certo?

 

Nesse caso, se o player tiver food == 0, não vai retornar nada, o que retorna é dentro da função getPlayerFood(cid), que retorna o número de food dele. Ai faz a comparação:

 

if 0 == 0 then

 

Mas ai o script prossegue e executa o doPlayerFeed porquê a condição é verdadeira.

 


Entendi, mas você pode criar direto no script? Como fez com:

 

function checkFood(cid, time)

 

(cid, time) seria os parametros?

 

Sim sim, isso ai mesmo.

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

  • 0

Nesse caso, se o player tiver food == 0, não vai retornar nada, o que retorna é dentro da função getPlayerFood(cid), que retorna o número de food dele. Ai faz a comparação:

 

if 0 == 0 then

 

Mas ai o script prossegue e executa o doPlayerFeed porquê a condição é verdadeira.Nesse caso, se o player tiver food == 0, não vai retornar nada, o que retorna é dentro da função getPlayerFood(cid), que retorna o número de food dele. Ai faz a comparação:

 

 

if 0 == 0 then

 

Mas ai o script prossegue e executa o doPlayerFeed porquê a condição é verdadeira.

 

Então, foi mais ou menos o que eu quis dizer UAHSUHASUA'

Tipo, então essa parte não é boleana né?

Porque o script executa a parte do doPlayerFeed porquê a condição é verdadeira.

Se não fosse verdadeira, não iria acontecer nada certo? por isso não precisa do return false.

É isso?

Link para o comentário
Compartilhar em outros sites

  • 0

Sim. Se fosse false, não iria acontecer nada que estivesse dentro daquela condição. Agora, observe o seguinte, mesmo a condição sendo verdadeira ou falsa, o checkFood(cid, tempo) vai executar, pois ele não está dentro de nenhuma condição.

 

function onLogin(cid)
local tempo = 10
if getPlayerFood(cid) == 0 then
doPlayerFeed(cid, 100)
end
checkFood(cid, tempo)
return true
end

 

Lembrando, sempre que um return for executado, o script para nesse ponto. Toda função que estiver abaixo é ignorada.

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

  • 0

Sim. Se fosse false, não iria acontecer nada que estivesse dentro daquela condição. Agora, observe o seguinte, mesmo a condição sendo verdadeira ou falsa, o checkFood(cid, tempo) vai executar, pois ele não está dentro de nenhuma condição.

 

function onLogin(cid)
local tempo = 10
if getPlayerFood(cid) == 0 then
doPlayerFeed(cid, 100)
end
checkFood(cid, tempo)
return true
end

 

Lembrando, sempre que um return for executado, o script para nesse ponto. Toda função que estiver abaixo é ignorada.

 

-------------------------------------------------------------------------

Entendi.

O que precisaria pro checkFood(cid, tempo) estar dentro de uma condição?

 

-------------------------------------------------------------------------

Saquei mano, se eu quiser continuar uma função depois de algum return eu devo colocar end?

Link para o comentário
Compartilhar em outros sites

  • 0

Pra um script estar dentro de uma condição é só ele estar dentro de um if:

 

if 3 == 3 then
checkFood(cid, time)
end

 

 

-------------------------------------------------------------------------

Saquei mano, se eu quiser continuar uma função depois de algum return eu devo colocar end?

 

Como assim?

Link para o comentário
Compartilhar em outros sites

  • 0

Entendi!

 

Aqui:

 

function onLogin(cid)
local tempo = 10
if getPlayerFood(cid) == 0 then
doPlayerFeed(cid, 100)
end
checkFood(cid, tempo)
return true
end

 

Por que o return esta antes do ultimo end, e nao antes do end que fecha o If?

 

---------------------------------------------------------------

 

Eu quis dizer assim:

 

Se eu tenho uma função com return true, pra eu iniciar outra no mesmo script eu devo colocar end depois do return né?

Link para o comentário
Compartilhar em outros sites

  • 0

Entendi!

 

Aqui:

 

function onLogin(cid)
local tempo = 10
if getPlayerFood(cid) == 0 then
doPlayerFeed(cid, 100)
end
checkFood(cid, tempo)
return true
end

 

Por que o return esta antes do ultimo end, e nao antes do end que fecha o If?

 

Rapaz, sempre que for fechar uma função principal, use return true. Por quê? Pra te falar a verdade eu não sei. O máximo que eu sei é que você deve evitar usar return false no final de uma função principal.

 

 

 

Eu quis dizer assim:

 

Se eu tenho uma função com return true, pra eu iniciar outra no mesmo script eu devo colocar end depois do return né?

 

Sempre que você usar um return, logo depois vem um end. Sempre assim.

Link para o comentário
Compartilhar em outros sites

  • 0

Entendo, mas se eu fizesse isso, estaria errado?

 

function onLogin(cid)

local tempo = 10

if getPlayerFood(cid) == 0 then

doPlayerFeed(cid, 100)

return true

end

checkFood(cid, tempo)

end

 

---------------------------------------------------------------------------------------

 

Entendi. Depois do end, ai sim eu posso iniciar uma nova função né?

Link para o comentário
Compartilhar em outros sites

  • 0

Entendo, mas se eu fizesse isso, estaria errado?

 

function onLogin(cid)

local tempo = 10

if getPlayerFood(cid) == 0 then

doPlayerFeed(cid, 100)

return true

end

checkFood(cid, tempo)

end

 

---------------------------------------------------------------------------------------

 

Entendi. Depois do end, ai sim eu posso iniciar uma nova função né?

 

Como eu já disse, um return sempre para o script em certo ponto. Como o return tá dentro da condição, se ela for verdadeira, a checagem de food nunca vai acontecer, pois o script vai retornar true e parar naquele ponto e a função checkFood não será executada.

Link para o comentário
Compartilhar em outros sites

  • 0

Rapaz, não entendi direito essa outra pergunta, mas vou explicar o funcionamento de um script:

 

function teste(cid) -- 1: Script reconhece que é uma função
if 3 == 3 then -- 2: Script faz a comparação
print("Hi") -- 3: Script executa a função se a comparação for verdadeira
end -- 4: Termina
return true -- 5: Retorna true
end -- 6: Termina tudo

 

Traduzindo, o script executa à medida em que os comandos são dados. Se você colocar a linha xx antes da linha yy, o script vai ler e executar primeiro a linha xx.

Link para o comentário
Compartilhar em outros sites

  • 0

Já entendi, a minha duvida era se o return true iria retornar a parte do if e a parte do check. Já vi que sim.

Obrigado pela imensa ajuda LuckOake, você é muito experiente cara.

Logo darei outro REP+.

Abraços!

 

Posso postar o sistema e colocar os créditos pra voce?

Link para o comentário
Compartilhar em outros sites

  • 0

Claro, mas os créditos são seus, você que fez o script, eu apenas te ajudei a arrumar ele :D

 

Fico feliz em saber que você conseguiu entender, quando eu vejo que a pessoa quer mesmo aprender eu faço o possível pra ela entender tudo :)

Link para o comentário
Compartilhar em outros sites

  • 0

Mas é uma parte sua :D

 

Pow, ajudou muito cara... Muito obrigado, de verdade.

Pelo menos tu ta disposto a ajudar mesmo, até o fim.

Valew.

 

@EDIT

Mano, como eu coloco no creaturescripts.xml?

as tags..

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


×
×
  • Criar Novo...