PsyMcKenzie 150 Postado Março 29, 2013 Share Postado Março 29, 2013 (editado) 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 Março 29, 2013 por PsyMcKenzie Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/ Compartilhar em outros sites More sharing options...
0 BananaFight 196 Postado Março 29, 2013 Share Postado Março 29, 2013 Adicione o script aqui para que eu possa entender o erro e tentar ajuda-lo. Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1494988 Compartilhar em outros sites More sharing options...
0 PsyMcKenzie 150 Postado Março 29, 2013 Autor Share Postado Março 29, 2013 É 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 https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495038 Compartilhar em outros sites More sharing options...
0 LuckOake 400 Postado Março 29, 2013 Share Postado Março 29, 2013 (editado) 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 Março 29, 2013 por LuckOake Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495042 Compartilhar em outros sites More sharing options...
0 PsyMcKenzie 150 Postado Março 29, 2013 Autor Share Postado Março 29, 2013 Ah mano, ai se me fode Da pra traduzir o script pra mim? To aprendendo ainda.. Tipo, coloca -- e escreve na frente o que significa cada parte se possivel Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495055 Compartilhar em outros sites More sharing options...
0 LuckOake 400 Postado Março 29, 2013 Share Postado Março 29, 2013 (editado) 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 Março 29, 2013 por LuckOake Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495059 Compartilhar em outros sites More sharing options...
0 PsyMcKenzie 150 Postado Março 29, 2013 Autor Share Postado Março 29, 2013 (editado) 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 Março 29, 2013 por PsyMcKenzie Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495068 Compartilhar em outros sites More sharing options...
0 LuckOake 400 Postado Março 29, 2013 Share Postado Março 29, 2013 (editado) 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 Março 29, 2013 por LuckOake Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495076 Compartilhar em outros sites More sharing options...
0 PsyMcKenzie 150 Postado Março 29, 2013 Autor Share Postado Março 29, 2013 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 https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495080 Compartilhar em outros sites More sharing options...
0 LuckOake 400 Postado Março 29, 2013 Share Postado Março 29, 2013 (editado) 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 Março 29, 2013 por LuckOake Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495085 Compartilhar em outros sites More sharing options...
0 PsyMcKenzie 150 Postado Março 29, 2013 Autor Share Postado Março 29, 2013 (editado) 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 Março 29, 2013 por PsyMcKenzie Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495088 Compartilhar em outros sites More sharing options...
0 LuckOake 400 Postado Março 29, 2013 Share Postado Março 29, 2013 (editado) 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 Março 29, 2013 por LuckOake Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495091 Compartilhar em outros sites More sharing options...
0 PsyMcKenzie 150 Postado Março 29, 2013 Autor Share Postado Março 29, 2013 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 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 https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495096 Compartilhar em outros sites More sharing options...
0 LuckOake 400 Postado Março 29, 2013 Share Postado Março 29, 2013 (editado) 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 Março 29, 2013 por LuckOake Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495104 Compartilhar em outros sites More sharing options...
0 PsyMcKenzie 150 Postado Março 29, 2013 Autor Share Postado Março 29, 2013 (editado) Certo, vamos por partes: PsyMcKenzie, 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 Março 29, 2013 por PsyMcKenzie Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495112 Compartilhar em outros sites More sharing options...
0 LuckOake 400 Postado Março 29, 2013 Share Postado Março 29, 2013 (editado) Certo, vamos por partes: PsyMcKenzie, 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 Março 29, 2013 por LuckOake Link para o comentário https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/#findComment-1495116 Compartilhar em outros sites More sharing options...
Pergunta
PsyMcKenzie 150
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 PsyMcKenzieLink para o comentário
https://xtibia.com/forum/topic/210883-erro-em-script-de-creature-script/Compartilhar em outros sites
Top Posters For This Question
20
17
1
1
Popular Days
Mar 29
39
Top Posters For This Question
PsyMcKenzie 20 posts
LuckOake 17 posts
Roksas 1 post
BananaFight 1 post
Popular Days
Mar 29 2013
39 posts
38 respostass a esta questão
Posts Recomendados