Ir para conteúdo

[Tutorial] Básico Sobre CreatureScripts


Posts Recomendados

Tutorial Básico sobre CreatureScripts

CreatureScripts = São scripts que serão ativados após uma determinada ação criada pelo monstro ou personagem. Essas ações são determinadas como funções. Existem varias funções utilizadas para a criação de creaturescripts e estas são:


onDeath(cid, corpse, killer)-- que é executada ao morrer.
onPrepareDeath(cid, lastHitKiller, mostDamageKiller) -- semelhante a onDeath.
onAttack(cid, target) -- executa ao atacar.
onCombat(cid, target) -- semelhante ao onAttack.
onLogin(cid) -- executa ao logar.
onLook(cid, thing, position, lookDistance) -- executa ao dar look.
onAdvance(cid, skill, oldLevel, newLevel) -- executa ao upar skills/levels.
onStatsChange(cid, attacker, type, combat, value) -- executa ao perder ou ganhar life/mana/condições.
onLogout(cid) -- executa ao deslogar.
onKill(cid, target, lastHit) -- executa ao matar.
onThink(cid, interval) -- executa em determinado tempo.
onJoinChannel(cid, channelId, users) -- executa ao entrar em um chat.
onReceiveMail(cid, sender, item, openBox) -- executa ao receber um parcel/carta.
onReportBug(cid, comment) -- executa ao reportar bug.

Para criar esse tipo de script, primeiramente vai na pasta data/creaturescripts/scripts e duplica um arquivo e salve com "nomedesejado";
Agora você vai determinar que função você vai precisar para criação do seu script. Para exemplo vou usar a função "onAdvance"(ao upar).
Neste exemplo, quando o player upar level 100 ele irá ganhar 1kk:

1 function onAdvance(cid, skill, oldLevel, newLevel)
   
2 if getPlayerLevel(cid) >= 100 and getPlayerStorageValue(cid, 1234) < 1 then -- checa level e storage
3      doPlayerAddItem(cid, 2160, 100) -- entraga a premiação
4       setPlayerStorageValue(cid, 1234, 1) -- define a storage para 1, para evitar entregar o premio mais de uma vez
5       doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Parabéns, você ganhou 1kk por atingir level 100!")
6       doSendMagicEffect(getCreaturePosition(cid), 30) 
7   end
8   return true
9 end

Numerei as linhas para melhor entendimento, nos seus scripts vocês não devem numerar.

linha 1 = Inicio da função onAdvance, essa linha recebe algumas informações do player que upou, como seu cid, seus skills o velho level e o novo level. Obs: cid = creature id, numero de identificação do player/monstro.
linha 2 = Inicia-se um if onde verifica se o level do player é igual a 100 e verifica a storage do player . Se for verdadeiro, o script executa as linhas 3,4 e 5, senão pula direto a linha 6.
linha 3 = Adiciona 100 itens com o id 2160 ao player.
linha 4 = define a storage do player para que não pegue o premio duas vezes
linha 5 = Manda uma mensagem parabenizando o player
linha 6 = Solta o efeito de numero 30, na posição em que o player esta.
linha 7 = Finaliza a verificação do if.
linha 8 = Retorna verdadeiro. Obs: sempre é necessario ela linha no final de seu código. 
linha 9 = Finaliza a função onAdvance.

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

Por fim para funcionamento do seu script é necessario adicionar 2 tags:
1º- No "data/creaturescripts/creaturescripts.xml"
2º- No arquivo "data/creaturescripts/scripts/login.lua", Obs: se o script que você for fazer for de função onLogin, não precisa adicionar a segunda tag.

1º Tag: Vai em data/creaturescripts/creaturescripts.xml e cole a tag:

<event type="advance" name="QualquerNome" event="script" value="nomedesejado.lua"/> 

O type="" , será o nome da função de seu script após a palavra "on" e sempre tudo em minusculo.
O name="", use qualquer nome porem esse nome vai ser usado para registrar no script onLogin na tag2.
O value="", é o nome com qual você salvou seu script.

Agora em data/creaturescripts/scripts/login.lua, sempre antes do último return true:


registerCreatureEvent(cid, "QualquerNome") 

QualquerNome é o name que você adicionou na tag1 do creaturescripts.xml.

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

Acho que é isso aew, espero ter ajudado a galera que esta iniciando.smile_positivo.gif

Dica para criação de scripts:
Para melhor edição e organização use Notepad++: http://www.baixaki.c...ad/notepad-.htm

E sempre pesquise por scripts prontos e tutoriais para ter uma base.


CREDITOS:

 

JHON pelo tutorial completo!

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

Olha amigo, apenas dê uma incrementada em seu script, para que fique algo simples e funcional.

Exemplo:
Linha 2: if getPlayerLevel(cid) >= 100 and getPlayerStorageValue(cid, 1234) < 1 then
Adionado a opção >=, pois eu ot com exp alta, o player pode pular do level 99 para o 101 por exemplo e também uma checagem por storage para verificar se ele já pegou a premiação, para evitar que ele fique se matando e pegando várias vezes a premiação

E por fim, colocando uma linha para atribuir o valor da storage caso ele pegue a recompensa.
setPlayerStorageValue(cid, 1234, 1)

Ficando assim o resultado:

function onAdvance(cid, skill, oldLevel, newLevel)
	if getPlayerLevel(cid) >= 100 and getPlayerStorageValue(cid, 1234) < 1 then -- checa level e storage
		doPlayerAddItem(cid, 2160, 100) -- entraga a premiação
		setPlayerStorageValue(cid, 1234, 1) -- define a storage para 1, para evitar entregar o premio mais de uma vez
		doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Parabéns, você ganhou 1kk por atingir level 100!")
		doSendMagicEffect(getCreaturePosition(cid), 30)
	end
	return true
end
Editado por Bruno Minervino
Link para o comentário
Compartilhar em outros sites

 

Olha amigo, apenas dê uma incrementada em seu script, para que fique algo simples e funcional.

 

Exemplo:

Linha 2: if getPlayerLevel(cid) >= 100 and getPlayerStorageValue(cid, 1234) < 1 then

Adionado a opção >=, pois eu ot com exp alta, o player pode pular do level 99 para o 101 por exemplo e também uma checagem por storage para verificar se ele já pegou a premiação, para evitar que ele fique se matando e pegando várias vezes a premiação

 

E por fim, colocando uma linha para atribuir o valor da storage caso ele pegue a recompensa.

setPlayerStorageValue(cid, 1234, 1)

 

Ficando assim o resultado:

function onAdvance(cid, skill, oldLevel, newLevel)
	if getPlayerLevel(cid) >= 100 and getPlayerStorageValue(cid, 1234) < 1 then -- checa level e storage
		doPlayerAddItem(cid, 2160, 100) -- entraga a premiação
		setPlayerStorageValue(cid, 1234, 1) -- define a storage para 1, para evitar entregar o premio mais de uma vez
		doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Parabéns, você ganhou 1kk por atingir level 100!")
		doSendMagicEffect(getCreaturePosition(cid), 30)
	end
	return true
end

Obrigado! topico Editado. grato pela ajuda.

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

Tutorial aprovado e movido, obrigado por compartilhar conosco.

Sugiro que apenas revise o comentário da linha 2, pois além de checar o level, ele checa a storage também.

Link para o comentário
Compartilhar em outros sites

Tutorial aprovado e movido, obrigado por compartilhar conosco.

Sugiro que apenas revise o comentário da linha 2, pois além de checar o level, ele checa a storage também.

Ok obrigado irei alterar o tutorial, muito obrigado pelas dicas :D

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...