Postado Março 16, 2016 10 anos Fala galera do TK. Vim trazer um npc que me ajuda muito ja que eu sou preguiçoso pra karamba. Esse npc funciona com o sistema de boat, só que duplo, tipo: você pode por ele em dois lugares e eles vão ficar fazendo viajem desse lugar para o outro. Vejam as imagens: Aqui ele está em um local qualquer e vai enviar o player para outro local já determinado. Aqui, no caso, ele foi enviado para esse local. O npc que está nesse barco vai viajar de volta de onde o player veio. E completa o ciclo de viajem, ida e volta. Bom, agora vamos adicionar o npc. Primeiro você tem que ter as coordenadas já preparadas de ida e vinda. Xml do npc: Citar <?xml version="1.0" encoding="UTF-8"?> <npc name="Pirate" script="data/npc/scripts/Boat_Double.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="97" head="95" body="10" legs="56" feet="77" addons="0"/> <voices> <voice text="Onde estao os marujos do meu barco?!" interval2="180" randomspectato="1" /> <voice text="Grrrrrrnnnn Aquela velho Jack roubou meu tesouro. Maldito Seja!" interval2="180" randomspectato="1" /> <voice text="Traga-me uma garrafa de rum!" interval2="180" randomspectato="1" /> <voice text="Eu ja viajei pelos sete mares e vi bestas horriveis!" interval2="180" randomspectato="1" /> </voices> <parameters> <parameter key="module_keywords" value="1" /> <parameter key="message_farewell" value="Mais um que me abandona!"/> </parameters> </npc> Agora o script lua do npc: Data/npc/scripts/ Citar local sqmDistancePerValueToTravel = 4 --a cada 4 sqm custa 1 gp local focuses = {} local function isFocused(cid) for pid in pairs(focuses) do if(pid == cid) then return true end end return false end local function addFocus(cid) if(not isFocused(cid)) then focuses[cid] = os.time() + 30 end end local function removeFocus(cid) local new = {} for pid,tienpo in pairs(focuses) do if(pid ~= cid) then new[pid] = tienpo end end focuses = new end local function lookAtFocus() for pid in pairs(focuses) do if(isPlayer(pid) == TRUE) then doNpcSetCreatureFocus(pid) return end end doNpcSetCreatureFocus(0) end function onCreatureAppear(cid) end function onCreatureDisappear(cid) if(isFocused(cid)) then removeFocus(cid) end end local C ={ dest = { --{{city=atual,pos=posicao do barco nessa city},{city=ida,pos=posicao do barco na city de ida}} {{city='rookguard',pos={x=1021,y=1138,z=6}},{city='formaya',pos={x=996,y=999,z=6}}}, }, appe = {'hi','hey','hello','oi'}, disa = {'bye','tchau','xau','good bye'} } local function isProximo(pos,prox,range) return (pos.x >= prox.x-range and pos.x <= prox.x+range and pos.y >= prox.y-range and pos.y <= prox.y+range and pos.z == prox.z) and true or false end local function getDestino(cid) for g,t in pairs(C.dest) do for k,v in pairs(t) do local dest = k > 1 and 1 or 2 if(isProximo(getCreaturePosition(cid),v.pos,5))then local priceForX = (C.dest[g][dest].pos.x - C.dest[g][k].pos.x)/sqmDistancePerValueToTravel local priceForY = (C.dest[g][dest].pos.y - C.dest[g][k].pos.y)/sqmDistancePerValueToTravel priceForX,priceForY = priceForX < 0 and -priceForX or priceForX, priceForY < 0 and -priceForY or priceForY return C.dest[g][dest].city,C.dest[g][dest].pos,math.floor(priceForX+priceForY) end end end end local dest,pos,price function onCreatureSay(cid, _, msg) local distance = getDistanceTo(cid) or LUA_ERROR local msg = msg:lower() if((distance > 3) or (distance == LUA_ERROR)) then return false end if(isInArray(C.disa,msg))then selfSay('Inté mais ver, volte sempre.') removeFocus(cid) return end if(isInArray(C.appe,msg))then dest,pos,price = getDestino(cid) selfSay("Seja Bem Vindo, "..getCreatureName(cid).." Eu estou viajando agora para {"..dest.."}, gostaria de ir por "..price.." Gps?") addFocus(cid) talkState = 1 elseif(isFocused(cid) and talkState == 1)then if(msg:match('yes') or msg:match('sim'))then if(doPlayerRemoveMoney(cid,price))then doTeleportThing(cid,pos,true) doSendMagicEffect(pos,10) removeFocus(cid) else selfSay('Desculpe mas vos nao tem ouro suficiente para viajar.') end else selfSay('Inté mais ver!') removeFocus(cid) end talkState = 0 else talkState = 0 if not(isFocused(cid))then return false else selfSay('Desculpe mas eu nao entendi.') end end return true end function onThink() for focus,tienpo in pairs(focuses) do if(tienpo < os.time()) then selfSay("Desculpe mas tenho que viajar agora. tchau!") removeFocus(focus) else local distance = getDistanceTo(focus) or -1 if((distance > 3) or (distance == -1)) then selfSay("Tchau!") removeFocus(focus) end end end lookAtFocus() end Explicando como mudar as posições e adicionar novas. Na tabela "dest" existe tabelas como essa: Citar {{city='rookguard',pos={x=1021,y=1138,z=6}},{city='formaya',pos={x=996,y=999,z=6}}}, Você apenas precisar duplicar essa tabela e modificar os valores dela. Espero que gostem e qualquer coisa relacionado ao npc me avisem. Editado Março 16, 2016 10 anos por dominus Eu faltei a aula de português (veja o histórico de edições)
Postado Março 16, 2016 10 anos Parabéns, seu tópico de conteúdo foi aprovado! Muito obrigado pela sua contribuição, nós do Tibia King agradecemos. Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP. Bruno Carvalho / Ex-Administrador TibiaKing [email protected] Em 26/12/2016 em 03:47, Spraypaint disse: A força da alienação vem dessa fragilidade dos indivíduos, quando apenas conseguem identificar o que os separa e não o que os une. -miltinho
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.