Muito bom Max!
Essa aula com certeza, abre a mente das pessoas
que querem fazer scripts.
Parabéns!
Abraços.
Por MaXwEllDeN, 29 de abr. de 2013 em Archived
info
Grupo: Marquês
Registrado: 18/05/11
Posts: 1.1k
Reputação: +150
Gênero: Masculino

Muito bom Max!
Essa aula com certeza, abre a mente das pessoas
que querem fazer scripts.
Parabéns!
Abraços.
info
Grupo: Marquês
Registrado: 02/08/12
Posts: 1k
Reputação: +234
Char no Tibia: Maurolkit

Ótimo tutorial Max.
Hhf20Ruz[/pastebin]
Editado Abril 29 por Skymagnum
info
Grupo: Herói
Registrado: 25/10/12
Posts: 2.4k
Reputação: +687
Gênero: Masculino
Char no Tibia: Nuncative

Parabéns e obrigado por compartilhar o conteúdo!
Aprovado e movido!
info
Grupo: Campones
Registrado: 26/04/13
Posts: 92
Reputação: +5

function onUse(cid, item, frompos, item2, topos) if isCreature(itemEx.uid) then doCreatureSay(itemEx.uid, "Aí, isso doi") then end return true end
Editado Abril 29 por AlexandreGiacobo
info
Grupo: Barão
Registrado: 18/10/10
Posts: 246
Reputação: +89
Char no Tibia: Elite Pamcadaum

Muito bom Max!
Essa aula com certeza, abre a mente das pessoas
que querem fazer scripts.
Parabéns!
Abraços.
Ótimo tutorial Max.Hhf20Ruz[/pastebin]
function onUse(cid, item, frompos, item2, topos) if isCreature(itemEx.uid) then doCreatureSay(itemEx.uid, "Aí, isso doi") then end return true end
function onUse(cid, item, frompos, item2, topos) if isCreature(itemEx.uid) then doCreatureSay(itemEx.uid, "Aí, isso doi") then end return true end
function onUse(cid, item, frompos, itemEx, topos) if isCreature(itemEx.uid) then doCreatureSay(itemEx.uid, "Aí, isso doi") end return true end
function onUse(cid, item, frompos, item2, topos) if isCreature(itemEx.uid) then doCreatureSay(itemEx.uid, "Aí, isso doi") then end return true end
function onUse(cid, item, frompos, item2, topos) if isCreature(item2.uid) then doCreatureSay(item2.uid, "Aí, isso doi") end return true end
Editado Agosto 2 por MaXwEllDeN
info
Grupo: Campones
Registrado: 26/04/13
Posts: 92
Reputação: +5

-Max
Obrigado por corrigir só vi teu tópico e fiz correndo nem prestei atenção no que tava botando,agora posso olhar com calma.
Aguardando ansiosamente seus novos tutoriais/exercícios!
info
Grupo: Conde
Registrado: 30/10/11
Posts: 625
Reputação: +101
Gênero: Masculino

só esqueceu de checar se é um player,n faria semtido uma slime falar ou um ghost falar que doi
ashusahusahsau
seriam sempre bom pensar nos minimos,tanto pela jogabilidade, quanto para n cometer erros como esquecer que os player podem estar usando utamo vita.
Editado Dezembro 3 por lordbug99
info
Grupo: Barão
Registrado: 18/10/10
Posts: 246
Reputação: +89
Char no Tibia: Elite Pamcadaum

só esqueceu de checar se é um player,n faria sendito uma slime falar ou um ghost falar que doi
ashusahusahsau
seriam sempre bom pensar nos minomos,tanto pela jogabilidade, quanto para n cometer erros como esquecer que os player podem estar usando utamo vita.
Cara, esse script é só pra exercitar as funções, não é útil pra ninguém um script como esse. E se fosse pra alguém usar em um servidor, seria mais viável criar uma tabela e dentro dela colocar o nome das criaturas que não falam, e se o alvo fosse uma delas, retornaria falso. Pois não são só players que falam, certo?
info
Grupo: Conde
Registrado: 30/10/11
Posts: 625
Reputação: +101
Gênero: Masculino

sim mas to falando, mas porque as veses as pessoas esquecem de considerar fatores que podem prejudicar o script(no caso de script é meio inutel).
como um script que mate o player instanteneamente
function onSay(cid,param) local player = getPlayerByName(param) if player then doTargetCombatHealth(cid, player, COMBAT_PHYSICALDAMAGE, -getCreatureMaxHealth(player), -getCreatureMaxHealth(player), CONST_ME_MORTAREA) return true end end
ve qual é o erro desse script?
info
Grupo: Barão
Registrado: 18/10/10
Posts: 246
Reputação: +89
Char no Tibia: Elite Pamcadaum

sim mas to falando, mas porque as veses as pessoas esquecem de considerar fatores que podem prejudicar o script(no caso de script é meio inutel).
como um script que mate o player instanteneamente
function onSay(cid,param) local player = getPlayerByName(param) if player then doTargetCombatHealth(cid, player, COMBAT_PHYSICALDAMAGE, -getCreatureMaxHealth(player), -getCreatureMaxHealth(player), CONST_ME_MORTAREA) return true end end
ve qual é o erro desse script?
Tlg, esquecem mesmo. Mas o objetivo do tópico foi ensinar sobre as funções. Isso ai que você tá falando é PENSAR e isso é algo que eu não posso ensinar a alguém.
Bem, isso que você esqueceu de colocar não é considerado um erro, se o script carregar e rodar, está tudo certo, já que ele foi feito pra ser rodado assim, então não tem nenhum erro. A falta da verificação se a criatura existe já é falha do programador em não pensar na possibilidade da criatura não existir, e é como eu disse, isso depende se o cara sabe pensar.
info
Grupo: Campones
Registrado: 22/11/12
Posts: 28
Reputação: +1

Bom pessoal o meu script ficou diferente, porque eu fiz ele diferente...
ai esta o script:
function onUse(cid, item, fromPosition, itemEx, toPosition)
doPlayerAddExperience(cid, 15000)
doCreatureSay(cid, "Aaaaii Delicia",19)
doPlayerSendCancel(uid, PEEEEIDEEEI)
end
return true
nesse meu script além de ele falar a palavra, ele da 15000 de Experiencia...
info
Grupo: Barão
Registrado: 18/10/10
Posts: 246
Reputação: +89
Char no Tibia: Elite Pamcadaum

Bom pessoal o meu script ficou diferente, porque eu fiz ele diferente...
ai esta o script:
function onUse(cid, item, fromPosition, itemEx, toPosition)
doPlayerAddExperience(cid, 15000)
doCreatureSay(cid, "Aaaaii Delicia",19)
doPlayerSendCancel(uid, PEEEEIDEEEI)
end
return true
nesse meu script além de ele falar a palavra, ele da 15000 de Experiencia...
Não vai funcionar bem como no exercício. Olha ai está o seu código, comentado:
function onUse(cid, item, fromPosition, itemEx, toPosition)
doPlayerAddExperience(cid, 15000) -- Vai adicionar 15000 de experiência para o player que usou a espada em alguém
doCreatureSay(cid, "Aaaaii Delicia",19) -- O player que usou a espada vai falar Aaaaaai Delicia
doPlayerSendCancel(uid, PEEEEIDEEEI) -- Vai dar erro, 1º Porque uid não é uma criatura válida, segundo porque PEEEEEEEEEEEIDEI não é uma string("PEEEEEEEEIDEIIIII", com àspas)
end
return true -- return true no lugar errado
Correção no seu código:
function onUse(cid, item, fromPosition, itemEx, toPosition) doPlayerAddExperience(cid, 15000) -- Vai adicionar 15000 de experiência para o player que usou a espada em alguém doCreatureSay(itemEx.uid, "Aaaaii Delicia",19) -- O player que estiver na mira da espada vai falar Aaaaaai Delicia doPlayerSendCancel(cid, "PEEEEIDEEEI") -- Você vai receber uma mensagem dizendo: PEEIIDEEEI return true -- No lugar certo end
info
Grupo: Campones
Registrado: 22/11/12
Posts: 28
Reputação: +1

Bom pessoal o meu script ficou diferente, porque eu fiz ele diferente...
ai esta o script:
function onUse(cid, item, fromPosition, itemEx, toPosition)
doPlayerAddExperience(cid, 15000)
doCreatureSay(cid, "Aaaaii Delicia",19)
doPlayerSendCancel(uid, PEEEEIDEEEI)
end
return true
nesse meu script além de ele falar a palavra, ele da 15000 de Experiencia...
Não vai funcionar bem como no exercício. Olha ai está o seu código, comentado:
function onUse(cid, item, fromPosition, itemEx, toPosition) doPlayerAddExperience(cid, 15000) -- Vai adicionar 15000 de experiência para o player que usou a espada em alguém doCreatureSay(cid, "Aaaaii Delicia",19) -- O player que usou a espada vai falar Aaaaaai Delicia doPlayerSendCancel(uid, PEEEEIDEEEI) -- Vai dar erro, 1º Porque uid não é uma criatura válida, segundo porque PEEEEEEEEEEEIDEI não é uma string("PEEEEEEEEIDEIIIII", com àspas) end return true -- return true no lugar errado
Correção no seu código:
function onUse(cid, item, fromPosition, itemEx, toPosition) doPlayerAddExperience(cid, 15000) -- Vai adicionar 15000 de experiência para o player que usou a espada em alguém doCreatureSay(itemEx.uid, "Aaaaii Delicia",19) -- O player que estiver na mira da espada vai falar Aaaaaai Delicia doPlayerSendCancel(cid, "PEEEEIDEEEI") -- Você vai receber uma mensagem dizendo: PEEIIDEEEI return true -- No lugar certo end
áa,, você poderia me explicar o porque? que o Return true tem que ficar naquele lugar?
info
Grupo: Barão
Registrado: 18/10/10
Posts: 246
Reputação: +89
Char no Tibia: Elite Pamcadaum

Bom pessoal o meu script ficou diferente, porque eu fiz ele diferente...
ai esta o script:
function onUse(cid, item, fromPosition, itemEx, toPosition)
doPlayerAddExperience(cid, 15000)
doCreatureSay(cid, "Aaaaii Delicia",19)
doPlayerSendCancel(uid, PEEEEIDEEEI)
end
return true
nesse meu script além de ele falar a palavra, ele da 15000 de Experiencia...
Não vai funcionar bem como no exercício. Olha ai está o seu código, comentado:
function onUse(cid, item, fromPosition, itemEx, toPosition) doPlayerAddExperience(cid, 15000) -- Vai adicionar 15000 de experiência para o player que usou a espada em alguém doCreatureSay(cid, "Aaaaii Delicia",19) -- O player que usou a espada vai falar Aaaaaai Delicia doPlayerSendCancel(uid, PEEEEIDEEEI) -- Vai dar erro, 1º Porque uid não é uma criatura válida, segundo porque PEEEEEEEEEEEIDEI não é uma string("PEEEEEEEEIDEIIIII", com àspas) end return true -- return true no lugar errado
Correção no seu código:
function onUse(cid, item, fromPosition, itemEx, toPosition) doPlayerAddExperience(cid, 15000) -- Vai adicionar 15000 de experiência para o player que usou a espada em alguém doCreatureSay(itemEx.uid, "Aaaaii Delicia",19) -- O player que estiver na mira da espada vai falar Aaaaaai Delicia doPlayerSendCancel(cid, "PEEEEIDEEEI") -- Você vai receber uma mensagem dizendo: PEEIIDEEEI return true -- No lugar certo end
áa,, você poderia me explicar o porque? que o Return true tem que ficar naquele lugar?
Porque tipo, do modo que você colocou, ele estava fora da função e, fora da função principal ele é inútil, ai ele tem que ser colocado no final da função principal, antes do último end, pra indicar que ocorreu tudo bem!
info
Grupo: Barão
Registrado: 18/10/10
Posts: 246
Reputação: +89
Char no Tibia: Elite Pamcadaum
Como funcionam os Scripts?
Você já deve ter se perguntado como os scripts funcionam ou não. Por exemplo: Como o servidor sabe que quando eu apertar com o botão direito em um Health Potion ele terá que healar o player alvo?
Em primeiro lugar devemos entender o que são callbacks. Do modo mais simples callback é algo que acontece devido a uma reação, é como a Terceira Lei de Newton que diz que toda ação gera uma reação, esse callback é a nossa reção, é uma função que vai ser executada assim que algo acontecer, no caso do Health Potion assim que ele for usado.
Quando um item é usado ele provoca a chamada de um callback dessa função:
– Max, que parâmetros são esses? :hum:
– É simples.
O Script do Health Potion ficaria +/- assim:
local config = { min_heal = 100, -- Minimo que vai healar max_heal = 200, -- Máximo que vai healar empty = 7636, -- Id do Potion vazio } function onUse(cid, item, fromPosition, itemEx, toPosition) if isCreature(itemEx.uid) then doCreatureSay(cid, "Aaaah...", 19) doSendMagicEffect(toPosition, 12) doCreatureAddHealth(itemEx.uid, math.random(config.min_heal, config.max_heal)) doTransformItem(item.uid, config.empty) else doPlayerSendCancel(cid, "You cannot use this object.") end return true endFunções usadas:
Bem, esse aí é o script, agora só é você salvar, colocar na sua pasta actions/scripts e pronto!
– Max, se existem vários scripts na pasta actions/scripts, como meu OT sabe qual usar?
– Por causa das chamadas TAGs.
– TAGs?
– Sim, é uma linha que é colocada no .xml para dizer ao seu servido que o Callback para um item x será a função daquele script.
As Tags das actions seguem esse modelo:
itemid - É o id do item, que ao ser usado o callback dele vai ser o script que está em value, no caso HealthPotion.lua
event - Indica o que vai acontecer quando usar o item, no caso vai ler o script. Não precisa se preocupar com isso por enquanto.
value - É o nome do script que tem o callback que você quer usar no item 7618
Exercício: Crie uma Action que quando eu usar uma Warlord Sword em alguém essa pessoa diga "Aí, isso doi". Poste a TAG também!
Resposta SÓ ABRA DEPOIS DE RESOLVER:
Tag:
É isso aí pessoal, essa foi a primeira aula de Scriptwriting que eu escreví, espero que gostem :3
Editado Dezembro 13 por Daniel