Ir para conteúdo

Criando Npcs Por Talkactions


Abacate123

Posts Recomendados

Bom sempre achei maior incomodo ter de esperar outro player acabar de falar com um npc para eu poder tentar falar com ele, dai vi o script do Thyrania(do servidor) que vc chegava na frente da estatua e falava com ela(via talkactions), dai pensei, se da para fazer um "npc" oraculo por talkactions, porque não fazer um npc de venda de itens?

Ai está passei a tarde toda para criar e editar esse script!

 

Vou fazer um modelo do vendedor de aol.

 

1º vai ser necessario paciencia!

2º saber mecher com scripts(actions, talkactions, etc)

3º abra a pasta data\talkactions\lib lá você encontrará o arquivo talkactions.lua. Abra-o!

4º dentro dele você irá encontrar isso:

-- Nothing --

 

coloque isso em seu lugar:

-- buy an item

-- aprimorado por kiko5

function buy(cid, itemid, count, cost)

cost = count*cost

amount = count

if doPlayerRemoveMoney(cid, cost) == 1 then

if getItemStackable(itemid) then

while count > 100 do

doPlayerAddItem(cid, itemid, 100)

count = count - 100

end

 

doPlayerAddItem(cid, itemid, count) -- add the last items, if there is left

else

while count > 0 do

doPlayerAddItem(cid, itemid, 1)

count = count - 1

end

end

 

if amount <= 1 then

doPlayerSendTextMessage(cid,22,'Aqui está seu '.. getItemName(itemid) .. '!')

else

doPlayerSendTextMessage(cid,22,'Aqui está seus '.. amount ..' '.. getItemName(itemid) .. 's!')

end

else

if amount <= 1 then

doPlayerSendTextMessage(cid,22,'Desculpe, você não tem dinheiro para comprar um '.. getItemName(itemid) .. '!')

else

doPlayerSendTextMessage(cid,22,'Desculpe, você não tem dinheiro para comprar '.. amount ..' '.. getItemName(itemid) .. '!')

end

end

end

essa é uma função(buy), que foi editada 50% por mim(eu transferi da pasta de origem[data\npc\scripts\lib] e como se deve perceber, se eu só a tivese passado de uma pasta para otra iria dar erros, então troquei os comandos assim retirando todos os erro possiveis, tambem tradizi o script para melhorar a vida dos players)

sintax:

buy(cid, itemid, count, cost)

exemplo:

buy(cid,2173,1,15000)

 

Legenda:

Verde:

Texto que aparecerá caso o player tenha dinhero para comprar o item.

Verde escuro:

a cor da mensagem(22 é verde)

Laranja:

Caso o player não tenha o dinhero necessario eirá aparecer essa msg.

Preto:

Codigos(não modificar anumcer que saiba oque está fazendo).

 

5º salve o arquivo e vamos para o proximo.

6º em data\talkactions\scripts crie um arquivo(.lua) com um nome qualquer(EX.: npc_aol1.lua)

7º abra-o e cole isso nele:

function onSay(cid, words, param)

maxdist = 5

pos = { x=716, y=1061, z=6, stackpos=1 }

npc = getThingfromPos(pos)

playerpos = getPlayerPosition(cid)

 

if math.max(math.abs(playerpos.x-pos.x), math.abs(playerpos.y-pos.y)) < maxdist then

doSendAnimatedText(pos, 'Olá!', 198)

doPlayerSendTextMessage(cid,22,"Diga aol(para compar o aol por 15k)")

 

return 0

else

doPlayerSendCancel(cid,"Desculpe, não é possivel.")

end

return 1

end

essa é a 1ª parte do npx, é onde ele diz oque vende, etc...

 

legenda:

Amarelo:

Posição do NPC.

Rosa:

distancia maxima que o player poderá estar para poder falar com o npc(distancia em SQM[para quem não sabe uque é, SQM são os "quadradinhos{tiles}" onde as coisas ficão])

Verde:

Texto que aparecerá quando o player dizer a palavra necessaria.

Verde escuro:

a cor da mensagem(22 é verde)(198 vermelho)

Vermelho:

essa messagem tem que ser cruta, pois não pode amostrar muito "texto" nela.(sugiro por somente 1 palavras no maximo 2)

Laranja:

Caso o player não dé algum erro e o player não possa falar com o npc.

8º salve.

9º crie outro arquivo(.lua), com um nome qualquer(ex.: npc_aol2.lua).

10º ponha isso dentro dele:

function onSay(cid, words, param)

maxdist = 5

pos = { x=716, y=1061, z=6, stackpos=1 }

pedra = getThingfromPos(pos)

playerpos = getPlayerPosition(cid)

 

if math.max(math.abs(playerpos.x-pos.x), math.abs(playerpos.y-pos.y)) < maxdist then

buy(cid,2173,1,15000)

doSendAnimatedText(pos, "Okay!", 198)

 

return 0

else

doPlayerSendCancel(cid,"Sorry, not possible.")

end

return 1

end

Aqui é a parte do npc onde ele vendo o item ao player.

 

Legenda:

Amarelo:

Posição do NPC.

Rosa:

distancia maxima que o player poderá estar para poder falar com o npc(distancia em SQM[para quem não sabe uque é, SQM são os "quadradinhos{tiles}" onde as coisas ficão])

Azul:

A função Buy(que agente pois na lib) respectivamente ID do item, quantidade, preço(em gps)

Verde escuro:

a cor da mensagem(22 é verde)(198 vermelho)

Vermelho:

essa messagem tem que ser cruta, pois não pode amostrar muito "texto" nela.(sugiro por somente 1 palavras no maximo 2)

Laranja:

Caso o player não dé algum erro e o player não possa falar com o npc.

 

11º salve o arquivo.

12º na pasta data\talkactions procure pelo arquivo talkactions.xml abra-o

13º adicione isso antes de </talkactions> e depois de <talkactions>:

<talkaction words="oi" script="npc_aol1.lua" />

<talkaction words="aol" script="npc_aol2.lua" />

ai estão as palavras magias para falar com o npc

 

legenda(se é que preisa...):

Vermelho:

palavras magicas

Azul:

Nome do arquivo que vc criou anteriormente(no meu caso é npc_aol1.lua e npc_aol2.lua)

 

14º salve o arquivo

15º ligue seu ot e se divirta

 

OBS.: eu testei sosinho e funcionou perfeitamente, não sei se em dupla(2 pessoas tentando falar com o npc) vai funcionar para os 2 ao mesmo tempo.

OBS².: eu testei no Thyrania 0.2.81 XML

OBS³.: qualquer duvida, reclamação, opinião, etc, podem postar.

 

Creditos:

Turtorial:

100% kiko5(Eu xP)

Script:

70% kiko5

30% equipe Thyrania

Lib:

50% kiko5

50% quem a criou(acho que é da equipe Thyrania, mas não tenho certesa)

 

Caso não coloquei os devidos creditos me comuniquem!

 

Se ja existe um turtorial igual a esse(que eu duvido muito), me comuniquem!

 

Se você quer postar esse turtorial em outro Forum, me comuniquem(caso contrario eu denucio por ripping)!

 

Se fdor por em outro forum e eu ja autorisei, ponhão os credito!

 

acho que é só galera, qualquer coisa só falar ^^

espero que aprovem meu turtorial xP

flws

Link para o comentário
Compartilhar em outros sites

  • Respostas 32
  • Created
  • Última resposta

Top Posters In This Topic

Realmente, ta muito legal.

 

Como o Escalador falou aí em cima: alguns errinhos de port.

 

Fora isso tá ótimo. Vou testar em outro server que nao seja o Thyrania e depois edito com a resposta.

 

Valeu, ate mais

Link para o comentário
Compartilhar em outros sites

@Tprocheira

 

na verdade não eu tive que adaptar esse código para fazer só para um item, na verdade era 2 itens que ele vendia xP

é muito fácil criar uma nova opção de item...

repita da 9ª até o fim

só que na 13ª ponha isso amais:

<talkaction words="nome do item" script="npc_aol3.lua" />

vermelho:

ponha o nome do item(que é a palavar magica xP)

 

7º abra-o e cole isso nele:
function onSay(cid, words, param)

maxdist = 5

pos = { x=716, y=1061, z=6, stackpos=1 }

npc = getThingfromPos(pos)

playerpos = getPlayerPosition(cid)

 

if math.max(math.abs(playerpos.x-pos.x), math.abs(playerpos.y-pos.y)) < maxdist then

doSendAnimatedText(pos, 'Olá!', 198)

doPlayerSendTextMessage(cid,22,"Diga aol(para compar o aol por 15k)")

 

return 0

else

doPlayerSendCancel(cid,"Desculpe, não é possivel.")

end

return 1

end

essa é a 1ª parte do npx, é onde ele diz oque vende, etc...

 

legenda:

Amarelo:

Posição do NPC.

Rosa:

distancia maxima que o player poderá estar para poder falar com o npc(distancia em SQM[para quem não sabe uque é, SQM são os "quadradinhos{tiles}" onde as coisas ficão])

Verde:

Texto que aparecerá quando o player dizer a palavra necessaria.

Verde escuro:

a cor da mensagem(22 é verde)(198 vermelho)

Vermelho:

essa messagem tem que ser cruta, pois não pode amostrar muito "texto" nela.(sugiro por somente 1 palavras no maximo 2)

Laranja:

Caso o player não dé algum erro e o player não possa falar com o npc.

 

na linha referente a isso:

doPlayerSendTextMessage(cid,22,"Diga aol(para compar o aol por 15k)")

 

é só mudar a msg adicionando o novo item assim:

doPlayerSendTextMessage(cid,22,"Diga aol(para compar o aol por 15k), MPA(para comprar a MPA por 40K), DSM(para compar a DSM por 35K)")

 

Diga aol(para compar o aol por 15k), MPA(para comprar a MPA por 40K), DSM(para compar a DSM por 35K)

e assim emdiante ^^

 

 

 

 

 

 

@topico

antes que alguem diga!

existe um bugs minimo, se o player chegar no npc e dizer somente aol(sem o hi, etc) ele vai conceguir comprar o item normalmente!

 

PS¹.: para melhor intendimento dos players, ponhão uma placa dizendo oque deve ser feito para poder comprar as coisas!

PS².: para que eu continue postando tutoriais, scripts, etc... ponhão os creditos!

PS³.: um dia terei!(xO)

 

@geral

vlw pelos elogios!

desculpa pelos erros gramaticais e

até a proxima!

Link para o comentário
Compartilhar em outros sites


×
×
  • Criar Novo...