Entendi, mas você pode criar direto no script? Como fez com:
function checkFood(cid, time)
(cid, time) seria os parametros?
Por PsyMcKenzie, 29 de mar. de 2013 em Scripts
info
Grupo: Marquês
Registrado: 18/05/11
Posts: 1.1k
Reputação: +150
Gênero: Masculino

Entendi, mas você pode criar direto no script? Como fez com:
function checkFood(cid, time)
(cid, time) seria os parametros?
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

@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 Março 29 por LuckOake
info
Grupo: Marquês
Registrado: 18/05/11
Posts: 1.1k
Reputação: +150
Gênero: Masculino

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?
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

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 Março 29 por LuckOake
info
Grupo: Marquês
Registrado: 18/05/11
Posts: 1.1k
Reputação: +150
Gênero: Masculino

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?
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

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?
info
Grupo: Marquês
Registrado: 18/05/11
Posts: 1.1k
Reputação: +150
Gênero: Masculino

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é?
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

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.
info
Grupo: Marquês
Registrado: 18/05/11
Posts: 1.1k
Reputação: +150
Gênero: Masculino

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é?
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

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.
info
Grupo: Marquês
Registrado: 18/05/11
Posts: 1.1k
Reputação: +150
Gênero: Masculino

Entendi!
Mas esse return true ai, vai checar o script inteiro?
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

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.
info
Grupo: Marquês
Registrado: 18/05/11
Posts: 1.1k
Reputação: +150
Gênero: Masculino

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?
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

Claro, mas os créditos são seus, você que fez o script, eu apenas te ajudei a arrumar ele ![]()
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 ![]()
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake
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:
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.
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 por LuckOake