Postado Março 16, 2016 9 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 9 anos por dominus Eu faltei a aula de português (veja o histórico de edições)
Postado Março 16, 2016 9 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.