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

É um script que estou fazendo pra postar.

É bem simples, pois sou bem iniciante!

 

 

function onThink(cid, interval)
  if getPlayerFood(cid) <= 30 then
  doCreatureAddHealth(cid, -20)
  doPlayerSendTextMessage(cid,19, "Você está com fome.")
  doSendMagicEffect(getCreaturePosition(cid), 30)
return true
else
return false
end
end

 

Aqui pra quando o player logar, ele nascer com feed.

 

 

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

Link para o comentário
Compartilhar em outros sites

  • 0

Faz o seguinte, usa um addEvent numa função onLogin:

 

function checkFood(cid, time)
   if getPlayerFood(cid) <= 30 then
       doCreatureAddHealth(cid, -20)
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você está com fome.")
       doSendMagicEffect(getCreaturePosition(cid), 30)
   end
return addEvent(checkFood, time*1000, cid, time)
end

function onLogin(cid)
   local tempo = 10 -- A cada quantos segundos será verificado
   checkFood(cid, tempo)
return true
end

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

  • 0

Se não entender algo, pode perguntar.

 

function checkFood(cid, time) -- Início da função
   if not isCreature(cid) then -- Se não achar o player
       return true -- Retorna true e para o script
   elseif getPlayerFood(cid) <= 30 then -- Se a food do player for igual ou menor que 30
       doCreatureAddHealth(cid, -20) -- Adicionar -20 hp nele
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você está com fome.") -- Mandar a mensagem
       doSendMagicEffect(getCreaturePosition(cid), 30) -- Mandar efeito
   end -- Fim
return addEvent(checkFood, time*1000, cid, time) -- Inicia a função novamente após 'time' segundos
end -- Fim da função

function onLogin(cid) -- Ao fazer login
   local tempo = 10 -- A cada quantos segundos será verificado
   checkFood(cid, tempo) -- Iniciar a verificação da food
return true
end -- Fim

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

  • 0

Valew cara, se é zica, mas.. da pra explicar melhor essa parte?

 

return addEvent(checkFood, time*1000, cid, time) -- Inicia a função novamente após 'time' segundos
end -- Fim da função

 

E a parte de quando logar eu posso fazer assim?

 

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

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

  • 0

Valew cara, se é zica, mas.. da pra explicar melhor essa parte?

 

return addEvent(checkFood, time*1000, cid, time) -- Inicia a função novamente após 'time' segundos
end -- Fim da função

 

Aqui:

 

return addEvent(checkFood, time*1000, cid, time) -- Inicia a função novamente após 'time' segundos

 

Significa que a função vai executar novamente após 'time' segundos, ou seja, se 'time' é igual a 5, o script vai se iniciar novamente após 5 segundos depois da verificação anterior. Isso ai é tipo recursividade, só que não serve pra achar resultados.

 

Posso fazer assim?

 

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

 

Poder pode, mas aconselho a colocar o return true antes do ultimo end. E do jeito que está ai, se o player tiver com food 0, é só relogar que a food volta pra 100.

 

E também é melhor colocar o if getPlayerFood(cid) == 0 then antes do checkFood(cid, tempo) pra alimentar antes de verificar, pois dessa maneira, se o player tiver com 0 food ele vai perder 20 de life quando logar. A ordem das funções altera os acontecimentos.

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

  • 0

function checkFood(cid, time) -- Início da função

 

Nem sabia da existência disso, achava que era só OnThink, OnLogin e mais umas la..

Onde encontro mais desse tipo pra começar scripts?

 

    if not isCreature(cid) then -- Se não achar o player

 

Essa parte é necessária mesmo?

 

        return true -- Retorna true e para o script

 

Como assim retorna true? pode esclarecer? desculpe o incomodo mano..

Link para o comentário
Compartilhar em outros sites

  • 0

function checkFood(cid, time) -- Início da função

 

Nem sabia da existência disso, achava que era só OnThink, OnLogin e mais umas la..

Onde encontro mais desse tipo pra começar scripts?

 

Na verdade, essa função ai foi criada ali no script que te mandei, ela não é uma função padrão do TFS. O que começa o script mesmo é o onLogin(cid).

 

	if not isCreature(cid) then -- Se não achar o player

 

Essa parte é necessária mesmo?

 

Sim, para o script verificar se o player está online. Se ele estiver offline e o script continuar executando, vai dar erro por tentar executar funções em um objeto não presente.

 

		return true -- Retorna true e para o script

 

Como assim retorna true? pode esclarecer? desculpe o incomodo mano..

 

Sempre que tiver um return numa condição verdadeira, o script para nesse ponto e retorna algo. Exemplo:

 

function ba(a)
if a == 3 then -- Se 'a' for igual a 3
return 8 -- Retorna 8
end
return false -- Retorna false caso nenhuma condição for verdadeira
end

 

Se você usar ba(3), vai retornar 8, pois a condição if a == 3 then foi cumprida e tinha um return ali.

 

Mas se você usar ba(5), vai retornar false, pois nenhuma condição que retorna algo foi cumprida.

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

  • 0
Aqui:

 

return addEvent(checkFood, time*1000, cid, time) -- Inicia a função novamente após 'time' segundos

 

Significa que a função vai executar novamente após 'time' segundos, ou seja, se 'time' é igual a 5, o script vai se iniciar novamente após 5 segundos depois da verificação anterior. Isso ai é tipo recursividade, só que não serve pra achar resultados.

 

Estou começando a entender. Não sei o que é recursividade, mas tudo bem kk

Quer dizer entao que essa parte serve dessa forma:

O script acontece, e essa parte ai, serve pra ele acontecer novamente depois de 5 segundos? É isso?

 

 

 

Poder pode, mas aconselho a colocar o return true antes do ultimo end. E do jeito que está ai, se o player tiver com food 0, é só relogar que a food volta pra 100.

 

E também é melhor colocar o if getPlayerFood(cid) == 0 then antes do checkFood(cid, tempo) pra alimentar antes de verificar, pois dessa maneira, se o player tiver com 0 food ele vai perder 20 de life quando logar. A ordem das funções altera os acontecimentos.

 

Pode crer, errei nessa parte do if GetPlayerFood

Então deve ficar assim?

 

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

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

  • 0
Aqui:

 

return addEvent(checkFood, time*1000, cid, time) -- Inicia a função novamente após 'time' segundos

 

Significa que a função vai executar novamente após 'time' segundos, ou seja, se 'time' é igual a 5, o script vai se iniciar novamente após 5 segundos depois da verificação anterior. Isso ai é tipo recursividade, só que não serve pra achar resultados.

 

Estou começando a entender. Não sei o que é recursividade, mas tudo bem kk

Quer dizer entao que essa parte serve dessa forma:

O script acontece, e essa parte ai, serve pra ele acontecer novamente depois de 5 segundos? É isso?

 

Isso ai mesmo.

 

Pode crer, errei nessa parte do if GetPlayerFood

Então deve ficar assim?

 

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

 

Não, assim:

 

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

 

OBS: Postei ali em cima te respondendo.

OBS²: Recursividade (Clique)

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

  • 0

Como assim criada no script que tu me mandou?

 

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

Tipo eu entendo mais ou menos.

 

 

if a == 3 then -- Se 'a' for igual a 3

 

Se o a foi igual ao 3, ele vai retornar true certo?

Mas o que significa isso?

 

Retornar o que sabe? é isso que nao entendo :s

 

Isso ai mesmo.

 

Aeeeee *-----*

Valew cara!

 

 

Não, assim:

 

 

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

 

Ah pode crer..

Ae sim mano, agora to entendendo essas parada :D

Obrigado!

 

Eu peguei um monte de tutoriais, imprimi e fiz apostilas.

Imprimi o manual de lua 5.1

mas sem ajuda assim é foda :/

Valew mesmo cara!

Link para o comentário
Compartilhar em outros sites

  • 0

Como assim criada no script que tu me mandou?

 

Você pode criar uma função, exemplo:

 

function criadaPraRetornarAlgo()
return math.random(1, 50)
end

 

Acabei de criar uma função que retorna um número aleatório entre 1 e 50.

 

Tipo eu entendo mais ou menos.

 

if a == 3 then -- Se 'a' for igual a 3

 

Se o a foi igual ao 3, ele vai retornar true certo?

Mas o que significa isso?

 

Retornar o que sabe? é isso que nao entendo :s

 

Vejamos assim:

 

a = 3
if a == 3 then
return 8
end

 

Você viu que 'a' vale 3.

 

Ai a verificação ficaria:

 

if 3 == 3 then
return 8
end

 

E 3 == 3 é verdadeiro, logo ficaria assim:

 

if true then
return 8
end

 

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.

 


Voltando à dúvida:

 

if a == 3 then -- Se 'a' for igual a 3

 

Sabemos que true == true, então o script vai prosseguir nessa condição. Exemplo:

 

if 3 == 3 then -- Verdadeiro
print("Hello") -- Script printa Hello
end -- Fim

 

Agora, vejamos assim:

 

if 4 == 3 then -- Falso
print("Hello") -- Script não executa isso porquê a condição é falsa
end -- Fim da condição

 


*booleano: Que possui valor true ou false.

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

  • 0

Certo, vamos por partes:

 

snapback.pngPsyMcKenzie, em 29/March/2013 - 15:08, disse:

 

Como assim criada no script que tu me mandou?

Você pode criar uma função, exemplo:

 

 

function criadaPraRetornarAlgo()

return math.random(1, 50)

end

 

Acabei de criar uma função que retorna um número aleatório entre 1 e 50.

 

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

Onde você criou essa função?

 

 

function checkFood(cid, time)

O que seria isso?

 

 

criadaPraRetornarAlgo()

 

To entendendo mano, mas tipo aqui não precisaria de um else?

 

if 3 == 3 then -- Verdadeiro

print("Hello") -- Script printa Hello

end -- Fim

 

 

Ficaria assim:

 

 

if 3 == 3 then -- Verdadeiro

print("Hello") -- Script printa Hello

return true

else

return false

end -- Fim

 

ou não? :x

 

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

 

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

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

  • 0

Certo, vamos por partes:

 

 

snapback.pngPsyMcKenzie, em 29/March/2013 - 15:08, disse:

 

Como assim criada no script que tu me mandou?

Você pode criar uma função, exemplo:

 

 

function criadaPraRetornarAlgo()

return math.random(1, 50)

end

 

Acabei de criar uma função que retorna um número aleatório entre 1 e 50.

 

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

Onde você criou essa função?

 

 

function checkFood(cid, time)

O que seria isso?

 

 

criadaPraRetornarAlgo()

 

Cara, existem funções básicas principais no TFS que servem pra manipular tudo que o player faz.

 

onLogin, onAttack, onThink, onSay, onUseWeapon, onCastSpell, etc

 

E existem funções complementares, que servem pra dar utilidade às funções principais, exemplo, ao fazer login (onLogin), adicionar item ao player (doPlayerAddItem).

 

Só que nem tudo que você quer fazer existe, então você tem que criar. É ai que você declara uma função nova.

 

Simplesmente por escrever:

 

function blablabla()
end

 

Você já criou uma função chamada blablabla. O que fica dentro dos parêntesis se chama parâmetros. Isso ai explico depois, primeiro você precisa entender tudo que te expliquei até aqui.

 


To entendendo mano, mas tipo aqui não precisaria de um else?

 

if 3 == 3 then -- Verdadeiro

print("Hello") -- Script printa Hello

end -- Fim

 

 

Ficaria assim:

 

 

if 3 == 3 then -- Verdadeiro

print("Hello") -- Script printa Hello

return true

else

return false

end -- Fim

 

ou não? :x

 

Não, pois a condição 3 == 3 não serve pro script ter o valor true, mas sim pra ele printar "Hello" caso a condição seja verdadeira.

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


×
×
  • Criar Novo...