Jump to content
Close

Search the Community

Showing results for tags 'Monster%252FNPC'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Community
    • Rules
    • Portal
    • Resources
    • Commerce
    • Clubs
  • OTServers
    • Discussion
    • Support
    • Tutorial
    • Download
    • Code Development
    • Contests and Events
    • Form Team
    • Advertise your Server
  • Tibia and Bots
    • Discussion
  • Others
    • Playground (Off-topic)
    • Other Games
    • Advertising
    • Graphics and Design
    • Development and Programming
  • League of Legends's Geral
  • League of Legends's Suporte
  • Nto New Season's Tópicos
  • Fakes's Fakes
  • Tibia's Geral
  • Tibia's Notícias
  • Tibia's Media
  • Tibia's Life Thread
  • Computação's Geral
  • Computação's Dicas e Tutoriais
  • Computação's Suporte
  • Roleplaying's Roleplaying
  • Academia de Mapping's Quadro da Clopin
  • Academia de Mapping's Dev Area
  • Academia de Mapping's Quadro do Nolis
  • Academia de Mapping's Quadro do Namikaze
  • Styller's Tópicos

Calendars

  • Official Calendar
  • OTServs Calendar
  • Several Calendars

Product Groups

  • Advertisements in Top
  • Advertisements In Signatures
  • Advertisements in Topics
  • Others Advertisements

Categories

  • Sales Section
    • Scripting Sales
    • Codes Sales
    • Mapping Sales
    • Websites Sales
    • Design/Sprites Sales
    • Bots Sales
  • Look Jobs
  • Looking for Freelancers
  • Team Formation

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Localization


My character


Favorite OTServ


Bot preferred


Interests

Found 49 results

  1. Nome: Present Tipo de arquivo: Npc Versão: 8.6x Bem pessoal, estava demorando para postar esse npc maravilhoso de uma ídeia genial que eu tive e será; maravilhosamente útil para vocês (creio eu). Oque ele faz? O NPC usa a função "string.sub(os.date()". Abra a pasta data/npc/scripts/ e crie um documento de texto .lua com o nome present e cole isso: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid ---------------- config msg ------------------ local frase1 = 'Present' -- (Player) -- Oque o player ira dizer para o npc -- local frase2 = 'Presente' -- (Player) -- Oque o player ira dizer para o npc² -- local frase3 = 'Você quer o presente agora?'-- Npc) -- voce quer agora? -- local frase4 = 'yes' -- (Player) -- yes -- local frase5 = 'Me desculpe! Você já ganhou hoje.' -- (Npc) -- voce ja ganhou por hj -- local frase6 = 'Obrigado, volte sempre' -- (Npc) -- aqui esta e seja feliz -- local frase7 = 'no' -- (Player) -- nao -- local frase8 = 'ok, poderas pegar mais tarde' -- (Npc) -- ok entao pega mais tarde -- local storage = 3333 -- storage que define o dia nao mexa a nao ser que saiba ps: use uma storage que nao esteja sendo usada =D-- local itemid = 7702 -- Present Diary -- ---------------------------------------------- if (msgcontains(msg, frase1) or msgcontains(msg, frase2)) and getPlayerStorageValue(cid, storage) == tonumber(string.sub(os.date(),4,5)) then selfSay(frase5, cid) elseif(msgcontains(msg, frase1) or msgcontains(msg, frase2)) then selfSay(frase3, cid) talkState[talkUser] = 1 elseif(msgcontains(msg, frase4) and talkState[talkUser] == 1) then selfSay(frase6, cid) setPlayerStorageValue(cid, storage, tonumber(string.sub(os.date(),4,5))) doPlayerAddItem(cid, itemid) talkState[talkUser] = 0 elseif(msgcontains(msg, frase7) and isInArray({1}, talkState[talkUser]) == TRUE) then talkState[talkUser] = 0 selfSay(frase8, cid) end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Nem preciso ensinar como configurar né? Agora em data/npc/ crie um arquivo .xml e renomeie para present, abra-o e adicione: <?xml version="1.0" encoding="UTF-8"?> <npc name="Fiscal da presenca" script="Present.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="3"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|, I am a Present diary! Say {present} to receive your gift today."/> </parameters> </npc> EDIT: O item 7702 que está no script, é um item que eu fiz que dar ao player muitos outros items, como uma bousa de items, que ao clicar, dar items Random entre 1 a 15... Você poderá colocar o ID que quiser, também poderá pegar minha ideia se preferir... Caso gostaria de por esse script na pagina do seu gesior ta aqui. Para adicionar, va até Htdocs ou www/ e crie um arquivo .php com o nome Present e adicione isso: <HTML> <HEAD> <TITLE> <?php $main_content .= ' <h1><center><b>Presen&ccedil;a Di&aacute;ria<h1></center></b> <table width="100%" cellspacing=1 cellpadding=4 border="0"> <tr bgcolor="'.$config['site']['vdarkborder'].'"> <th align="left">Legenda</th> </tr> <tr bgcolor="'.$config['site']['darkborder'].'"> <td align="left" valign="top"> <ul> <li> <strong> Você terá a oportunidade de participar da Missão de Presença Diária obtida com a NPC Fiscal de Presença, ganhando recompensas diárias. São dez tipos de recompensas, então se programe para não perder nenhum dia do evento em busca da recompensa máxima! </strong> </li> <br> <li> <strong> Essa é uma missão especial que fica disponível temporariamente de tempos em tempos. Basta já ter alcançado no mínimo o nível 200 para poder participar. Você pode repetir a missão diariamente e acumular prêmios.</td> </strong> </li> </ul> </tr> </table> <br> <table width="100%" cellspacing=1 cellpadding=4 border="0"> <tr bgcolor="'.$config['site']['vdarkborder'].'"> <th width="100%">Como participar?</th> </tr> </table> <table cellspacing=1 cellpadding=4 width="100%" border="0"> <tr bgcolor="'.$config['site']['darkborder'].'" align="center"> <td width="100%" align="center"><strong>Primeiro, você precisa falar com o NPC Fiscal de Presença localizado próximo ao "NPC DE RINGS" na cidade principal de Draconia para pegar a Missão. Lembrando que você só pode pegar essa Missão uma vez por dia.</strong></td> </tr> </table> <br> <table width="100%" cellspacing=1 cellpadding=4 border="0"> <tr bgcolor="'.$config['site']['vdarkborder'].'"> <th width="100%">E qual é essa recompensa?</th> </tr> </table> <table cellspacing=1 cellpadding=4 width="100%" border="0"> <tr bgcolor="'.$config['site']['darkborder'].'" align="center"> <td width="100%" align="center"><strong>Todo dia que você completar a Missão, vai receber um pacote de itens. Abaixo listarei os items disponiveis possiveis de dropar no "presencia diaria".</strong></td> </tr> </table> <br> <table width="100%" cellspacing=1 cellpadding=4 border="0"> <tr bgcolor="'.$config['site']['vdarkborder'].'"> <th width="33%">Item</th> <th width="33%">Chance de droop</th> </tr> </table> <table cellspacing=1 cellpadding=4 width="100%" border="0"> <tr bgcolor="'.$config['site']['darkborder'].'" align="center"> <td width="33%" align="center"><strong>100k</strong></td> <td width="33%"><strong>10%</strong></td> </tr> <tr bgcolor="'.$config['site']['lightborder'].'" align="center"> <td width="33%"><strong>Magic Plate Armor</strong></td> <td width="33%"><strong>10%</strong></td> </tr> <tr bgcolor="'.$config['site']['darkborder'].'" align="center"> <td width="33%"><strong>Boots Of Haste</strong></td> <td width="33%"><strong>10%</strong></td> </tr> <tr bgcolor="'.$config['site']['lightborder'].'" align="center"> <td width="33%"><strong>Demon Shield</strong></td> <td width="33%"><strong>10%</strong></td> </tr> <tr bgcolor="'.$config['site']['darkborder'].'" align="center"> <td width="33%"><strong>Frozen Starlight</strong></td> <td width="33%"><strong>10%</strong></td> </tr> <tr bgcolor="'.$config['site']['lightborder'].'" align="center"> <td width="33%"><strong>Annihilation Bear</strong></td> <td width="33%"><strong>10%</strong></td> </tr> <tr bgcolor="'.$config['site']['darkborder'].'" align="center"> <td width="33%"><strong>Piece Of Draconian Steel</strong></td> <td width="33%"><strong>10%</strong></td> </tr> <tr bgcolor="'.$config['site']['lightborder'].'" align="center"> <td width="33%"><strong>Golden Legs</strong></td> <td width="33%"><strong>10%</strong></td> </tr> <tr bgcolor="'.$config['site']['darkborder'].'" align="center"> <td width="33%"><strong>Crown</strong></td> <td width="33%"><strong>10%</strong></td> </tr> <tr bgcolor="'.$config['site']['lightborder'].'" align="center"> <td width="33%"><strong>Goldfish Bowl</strong></td> <td width="33%"><strong>10%</strong></td> </tr> </table> <br> <p align="right"> Page Present By: <a href="mailto:weslley_subyth@hotmail.com">Weslley</a> '; ?> </TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"> </HEAD> Agora em Index.php adicione: case "present": $topic = "Present Diary"; $subtopic = "present"; include("present.php"); break; Depois va em layout/.(nomedolayout)./layout.php abra e adicione: <a href='?subtopic=present'> <div id='submenu_present' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_present' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'>Presence diary</div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> Screenshot: Script Present + pagina gesior.rar Créditos: Willams 80% ............Subyth 20%
  2. Olá galera do tibiaking , eu estava sem fazer nada (como sempre) E Resolvi criar uma questzinha que da um Ars mais de RPG no servidor é uma quest simples . Funciona da segunte maneira Eu chego para um NPC e falo Player : Hi NPC : Olá |PlayerName|, Eu Tenho uma missãozinha para voce! Player : Mission NPC: Entregue X Items para Marlon e Ganhe Uma X Recompensa! Player: Yes NPC: Obrigado , Boa sorte com sua jornada Ai o player ganha um item. Ai ele vai no Marlon e fala Player: Hi NPC: Olá |PlayerName|, Está terminando de fazer Uma Missao? Player: Mission NPC: Frederic Mandou Voce me Entregar Esse X Item? Player : Yes NPC: Obrigado Por me trazer esses items ---------------------------------------------- Então galera , maos a Obra Primeiro , Abra a Pasta do OT/Data/NPC/ Copie um arquivo qualquer XML , Renomeie para frederic , e lá coloque Depois abra a pasta Scripts do NPC. copie um arquivo qualquer lua, e renomeie para frederic e edntro dele coloque Pronto , o NPC para voce pegar a missao está pronto agora vamos criar o NPC para voce entregar o item e receber seu premio Volte a pasta NPC , copie outro arquivo xml e renomeie para marlon , e dentro dele voce coloca Agora vá de novo a pasta Scripts do NPC e dentro dele , voce copia outro arquivo lua , renomeia para marlon e dentro dele voce coloca Se voce quizer adicionar para o player dar como premio , EXP , basta voce adicionar doPlayerAddExp(cid,30000) No lugar de 30000 , voce edita a quantidade de exp a ser adiiconada e para voce poe dentro da script voce procura a funçao doPlayerAddItem(cid,PREMIO,PQUANT) e debaixo dele voce adiciona a função de adicionar a exp Qualquer duvida sobre a script só perguntar REP+ se ajudei REP+ , se voce aprovou REP+ , se voce usar em seu servidor
  3. [NPC] Troca de Itens Olá a Todos! Introdução Estou criando esse tópico, porque vejo que muitos tem dúvida e nada melhor para entender que um próprio exemplo, não achas? Utilidade Será um NPC, que trocará itens com o player, ou seja, pedirá Item1 e dará o Item2, que poderá ser configurado no script. Código Toddy.lua O código acima possui a acessibilidade de troca de IDs e Quantidades, para isso vá no CONFIGS e altere. Quest? Para colocar como uma quest so é necessário mudar de ["false"] para ["true"]. Espero que tenham entendido, qualquer dúvida posta no tópico! Atenciosamente, Aluccard.
  4. Olá fiz este tópico para mostrar um npc que eu estive desenvolvendo hoje, é um npc de auction, vou explicar com algumas screen's: *Suporta servidores em Sqlite e Mysql* O Npc basicamente funciona da seguinte maneira, você "deposita" alguns items neste npc e durante "X" dias ele vende para você, claro que o npc irá cobrar "Y" preço pelo serviço: por exemplo vou depositar no npc 2 solar axe: (No meu caso ele vai me vender o item até o dia 20 de setembro como está ali na imagem) [+] Além disso você pode verificar os items que você depositou no npc: [+] Então para comprar basta falar dizer trade e selecionar o tipo de item que você quer comprar que o próprio npc irá selecionar para você: [+] Como eu tinha colocado somente 2 solar axe e se algum player exceder esse limite retorna uma mensagem: [+] Caso algum player compre o seu item você é avisado tanto offline como online: (Neste caso eu comprei as 2 solar axe que deu um total de 300000) [+] Para remover o dinheiro recebido pelo item basta ir no npc: [+] Ah Vod, mas se eu não vender os items oque acontece com eles? eles são enviados para o depot e você é avisado: Por enquanto é só isso, eu estava colocando mais uns items no npc para ver como fica: obs: tem 2 demon armor porque são de players diferentes xD
  5. Ola Poketibianos, Venho Trazer Todos Gym Funcionais. • GYM: ├ Misty; ├ Blaine; ├ Brock; ├ Erika; ├ Koga; ├ Sabrina; ├ Surge; └ Giovanni; • Download: http://www.mediafire.com/?18e923ns5mm1ccq
  6. Olá galera do TibiaKing, a um tempo eu estava querendo um NPC que vendia spells (magias) Porém, eu não achava, na época não tinha, então, eu fui no ##### e pedi lá esse NPC que vendia spells pelo NPC, ai o "VODKART", postou esse NPC lá e me ajudou, e se não me engano, não existe esse NPC aqui no TK, então agora irá ter. Chega de papo/enrolação e vamos para o que interessa. Abra a pasta do seu OT/data/npc/NOME DO SEU NPC.xml e coloque isso: Agora abra a pasta do seu OT/data/npc/scripts/spell_seller.lua e coloque isso: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid local moeda = 2157 local t = { ["light healing"] = {price = 15,vocations = {1,2,3,4},level = 9}, ["find person"] = {price = 25,vocations = {3,4},level = 8}, ["light magic missile"] = {price =30,vocations = {1,5,7,8},level = 15}, ["energy strike"] = {price =20,vocations = {1,2,5,6},level = 12}, ["flame strike"] = {price =100,vocations = {1,2,5,6},level = 12} } if (msgcontains(msg, 'SPELLS') or msgcontains(msg, 'spells'))then local str = "" str = str .. "Eu vendo estas Magias: " for name, pos in pairs(t) do str = str.." {"..name.."} = "..pos.price.." Moedas /" end str = str .. "." npcHandler:say(str, cid) elseif t[msg] then if not getPlayerLearnedInstantSpell(cid, msg) then if getPlayerLevel(cid) >= t[msg].level then if isInArray(t[msg].vocations, getPlayerVocation(cid)) then if doPlayerRemoveItem(cid,moeda,t[msg].price) then doPlayerLearnInstantSpell(cid, msg) npcHandler:say("Você aprendeu uma nova magia chamada ".. msg .."!", cid) else npcHandler:say("você não tem "..t[msg].price.." ".. getItemNameById(moeda), cid) end else npcHandler:say("você não tem a vocação para comprar está spell.", cid) end else npcHandler:say("você precisa ter level "..t[msg].level.." ou mais para comprar essa magia.", cid) end else npcHandler:say("você já aprendeu essa magia.", cid) end end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Configurando as spells que serão vendidas é aqui: local t = { ["light Healing"] = {price = 15,vocations = {1,2,3,4},level = 9}, ["find person"] = {price = 25,vocations = {3,4},level = 8}, ["light magic missile"] = {price =30,vocations = {1,5,7,8},level = 15}, ["energy strike"] = {price =20,vocations = {1,2,5,6},level = 12}, ["flame strike"] = {price =100,vocations = {1,2,5,6},level = 12} } ["Nome da Spells"] ={price = Quantos Coins (NO CASO ESTÁ COINS) irá custar. Vocations ={ID DAS VOC},level = level para poder usar a magia} E para usar a magia só quem comprou você faz o seguinte vai em spells.xml e na tag da magia nessa parte: needlearn="0" Você coloca assim: needlearn="1" EXPLICANDO SOBRE O NEEDLEARN: needlearn="1" -- Aqui está que precisa comprar a magia no NPC para poder usa-la. needlearn="0" -- Aqui está que não precisa comprar a magia no NPC para poder usa-la. CRÉDITOS: Vodkart (Pelo Script) Thiagobji (Pelo Tópico, Pelo Pedido e por postar no TibiaKing.com) É ISSO GALERA, QUALQUER DÚVIDA SÓ POSTAR.
  7. Bem venho postar esse script de um npc de vocations. Explicando: caso queria adicionar mais vocations faça o seguinte. Mude isso: Para isso: E mude isso: Para isso: Pronto assim você acabou de adicionar a vocation elite knight no seu npc caso queira adicionar ainda mais faça o seguinte. Errado: E também quando for adicionar na hora de falar: Agora é só por seu npc configurado no seu servidor e se divertir . Obrigado pela atenção de todos, sigam o tutorial para adicionar novas vocações sempre em , caso queria que só certas vocações possam trocar a vocação usem esse outro script Esse script /\ está apenas configurado para elder druid e master sorcerer se quiser adicionar mais siga o tutorial acima. Só isso galera.
  8. Listão de NPCs, Monsters & Raids Nome do Tópico: NPC Mount Autor: Trypox Link do Tópico: http://tibiaking.com/forum/topic/7814-npc-mount/ Comentário: Nome do Tópico: Outfit Maker Autor: ThalesMesquita Link do Tópico: http://tibiaking.com/forum/topic/7731-outfit-maker/ Comentário: Nome do Tópico: NPC BLESS Autor: DevilMoon Link do Tópico: http://tibiaking.com/forum/topic/7675-npc-bless/ Comentário: Nome do Tópico: [NPC] Mission Autor: Dudu Ruller Link do Tópico: http://tibiaking.com/forum/topic/7582-npc-mission/ Comentário: Nome do Tópico: Pet system Autor: Fox B. Link do Tópico: http://tibiaking.com/forum/topic/4339-pet-system-by-delyria/ Comentário: Nome do Tópico: Aprendar a criar e postar um NPC no seu Map Autor: JhonatanCWest Link do Tópico: http://tibiaking.com/forum/topic/2414-aprenda-a-criar-e-postar-um-npc-no-seu-map/ Comentário: Nome do Tópico: [NPC] Mate o monstro e complete sua tarefa Autor: thalia Link do Tópico: http://tibiaking.com/forum/topic/2094-npc-mate-o-monstro-e-complete-sua-tarefa/ Comentário: Nome do Tópico: [NPC] Apostador de Vegas Autor: thalia Link do Tópico: http://tibiaking.com/forum/topic/2066-npc-apostador-de-vegas/ Comentário: OBSERVAÇÃO: Como há muitos tópicos apenas os das primeiras páginas serão adicionados, os que não forem atualizados ou os autores de seus tópicos abandonar o tópico, será excluido dando chance a outro tópico. A ultima atualização ocorreu: 18/10/2011 ás 22:15 Você não está com seu tópico em nossa lista? Comentem em nosso tópico que atualizaremos no ato!
  9. Esse npc é utizado pela guild , um npc de banco para todos membros. 1- Você deve ir na sua database é adicionar esse comando alter table guilds add balance int(11) not null default 0; 2- Agora crie um arquivo na pasta npc e coloque isso dentro. <!--?xml version="1.0" encoding="UTF-8"?--> <npc name="Jhon" script="guildbank.lua" walkinterval="0" floorchange="0"> <health now="150" max="150"> <look type="129" head="114" body="119" legs="114" feet="114" corpse="2212"> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|. If you wan't to see your guild's balance, say {balance}."> </parameter></parameters> </look></health></npc> Em seguida abra pasta scripts que está dentro da pasta npcs , crie um arquivo chamado guildbank e cole isto. function getGuildBalance(id) local query = db.getResult("select balance from guilds where id = " .. id .. ";") if query:getID() ~= -1 then return query:getDataInt("balance") end return LUA_ERROR end local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local money = 0 function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE and 0 or cid if msgcontains(msg, "balance") then if getPlayerGuildId(cid) < 1 then selfSay("You don't have any guild.", cid) else selfSay("The balance for the guild " .. getPlayerGuildName(cid) .. " is " .. getGuildBalance(getPlayerGuildId(cid)) .. " gold coins.", cid) talkState[talkUser] = 0 end elseif msgcontains(msg, "deposit") then if getPlayerGuildId(cid) < 1 then selfSay("You don't have any guild.", cid) else selfSay("How much money do you want deposit to your guild balance?", cid) talkState[talkUser] = 1 end elseif talkState[talkUser] == 1 then if not tonumber(msg) or tonumber(msg) < 1 then selfSay("Please tell me how much do you want to deposit to your guild's balance?", cid) end money = math.abs(tonumber(msg)) selfSay("Are you sure that do you want to deposit " .. money .. " gold coins to your guild's balance?", cid) talkState[talkUser] = 2 elseif msgcontains(msg, "yes") and talkState[talkUser] == 2 then if getPlayerGuildId(cid) < 1 then selfSay("You don't have any guild.", cid) else if getPlayerMoney(cid) >= money then local query = db.executeQuery("update guilds set balance = balance + " .. money .. " where id = " .. getPlayerGuildId(cid) .. ";") if query ~= LUA_ERROR then selfSay("You have deposited " .. money .. " gold coins to your guild's balance.", cid) doPlayerRemoveMoney(cid, money) talkState[talkUser] = 0 else selfSay("Money can not be deposited, please contact a gamemaster.", cid) error("[Error::Query] " .. query .. ", error while trying to add a value into balance.") talkState[talkUser] = 0 end else selfSay("Sorry, you don't have the money.", cid) talkState[talkUser] = 0 end end elseif msgcontains(msg, "withdraw") then if getPlayerGuildId(cid) < 1 then selfSay("You don't have any guild.", cid) else selfSay("How much money do you want to withdraw from your guild's balance?", cid) talkState[talkUser] = 3 end elseif talkState[talkUser] == 3 then if not tonumber(msg) or tonumber(msg) < 1 then selfSay("Please tell me how much do you want to withdraw from your guild's balance?", cid) end money = math.abs(tonumber(msg)) selfSay("Are you sure that do you want to withdraw " .. money .. " gold coins from your guild's balance?", cid) talkState[talkUser] = 4 elseif msgcontains(msg, "yes") and talkState[talkUser] == 4 then if getPlayerGuildId(cid) < 1 then selfSay("You don't have any guild.", cid) else if getGuildBalance(getPlayerGuildId(cid)) >= money then local query = db.executeQuery("update guilds set balance = (balance - " .. money.. ") where id = " .. getPlayerGuildId(cid) .. ";") if query then selfSay("You withdraw " .. money .. " gold coins from your guild's balance.", cid) doPlayerAddMoney(cid, money) talkState[talkUser] = 0 else selfSay("Money can not be retired, please contact a gamemaster.", cid) error("[Error::Query] " .. query .. ", error while trying to remove a value from balance.") talkState[talkUser] = 0 end else selfSay("Sorry, your guild don't have the money in the balance.", cid) talkState[talkUser] = 0 end end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Pronto , bom divertimento. Créditos: darkhaos
  10. Nome: Married System Versão: 8.70 Executavel testado: Crystal server V1.0 Bem, esse script eu fiz no meu projeto, arrumei ele completo para funcionar perfeitamente sem nenhum bug no 8.70, claro que consegui. Em data/npc crie um arquivo .xml e adicione: <?xml version="1.0" encoding="UTF-8"?> <npc name="Priest" script="data/npc/scripts/NOME_SCRIPT_NO_LUA.lua" walkinterval="0" floorchange="0"> <health now="200" max="200"/> <look type="57" head="20" body="30" legs="40" feet="50"/> </npc> Agora em data/npc/scripts crie um arquivo .lua e adicione: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'marry') or msgcontains(msg, 'marriage') then if getPlayerStorageValue(cid,3066) == -1 then selfSay('Would you like to get married?', cid) talkState[talkUser] = 1 elseif getPlayerStorageValue(cid,3066) == 1 then local fid = getPlayerGUID(cid) local marrystatus = getOwnMarryStatus(fid) if marrystatus ~= 0 then local newpartner = getPlayerNameByGUID(marrystatus) selfSay('You already set a wedding date with {' .. newpartner .. '}, now I must talk to your partner. Do you want to {cancel} it?', cid) talkState[talkUser] = 5 else setPlayerStorageValue(cid,3066,-1) selfSay('Would you like to get married?', cid) talkState[talkUser] = 1 end elseif getPlayerStorageValue(cid,3066) == 2 then selfSay('You are already married. If you want to {divorce}, just say it.', cid) talkState[talkUser] = 0 end elseif msgcontains(msg, 'divorce') then if getPlayerStorageValue(cid,3066) == 2 then selfSay('Would you like to divorce of your partner?', cid) talkState[talkUser] = 6 else selfSay('You are not married. If you want to get married, just say {marry}.', cid) talkState[talkUser] = 0 end end if talkState[talkUser] == 1 then if msgcontains(msg, 'yes') then local fid = getPlayerGUID(cid) local marrystatus = getMarryStatus(fid) if marrystatus == FALSE then selfSay('And what\'s the name of your future partner?', cid) talkState[talkUser] = 2 else local marryname = getPlayerNameByGUID(marrystatus) selfSay('{' .. marryname .. '} has set a wedding date with you. Do you want to {proceed} or {cancel} the wedding?', cid) talkState[talkUser] = 4 end end elseif talkState[talkUser] == 2 then local p = msg local player = getPlayerName(cid) local fid = getPlayerGUID(cid) local sid = getPlayerGUIDByName(p) if sid == 0 then selfSay('A player with that name does not exists.', cid) talkState[talkUser] = 0 elseif sid == fid then selfSay('Don\'t worry, you will always be married with yourself, kid.', cid) talkState[talkUser] = 0 else local marrystatus = getMarryStatus(fid) local pmarriage = getPlayerMarriage(sid) local ownstatus = getOwnMarryStatus(cid) if pmarriage == FALSE then if marrystatus == FALSE then if ownstatus == FALSE then setPlayerStorageValue(cid,3066,1) addMarryStatus(fid,sid) selfSay('You\'ve just set a wedding date with {' .. p .. '}.', cid) talkState[talkUser] = 0 else local partnername = getPlayerNameByGUID(ownstatus) selfSay('{' .. p .. '} has already set a wedding date with {' .. partnername .. '}.', cid) talkState[talkUser] = 0 end else local marryname = getPlayerNameByGUID(marrystatus) selfSay('{' .. marryname .. '} has set a wedding date with you. Do you want to {proceed} or {cancel} the wedding?', cid) talkState[talkUser] = 4 end else local pname = getPlayerNameByGUID(pmarriage) selfSay('Sorry, but {' .. p .. '} is already married to {' .. pname .. '}.', cid) talkState[talkUser] = 0 end end elseif talkState[talkUser] == 4 then if msgcontains(msg, 'proceed') then local fid = getPlayerGUID(cid) local sid = getMarryStatus(fid) local marryname = getPlayerNameByGUID(sid) local pid = getPlayerByNameWildcard(marryname) local tmf = getCreaturePosition(cid) local tms = getCreaturePosition(pid) local text = {'I love you!','My love!','Baby dear!'} local chance1 = math.random(1,table.getn(text)) local chance2 = math.random(1,table.getn(text)) local dateFormat = "%A %d"..getMonthDayEnding(os.date("%d")).." %B %Y" local ring = doPlayerAddItem(cid,2121,1) local ring2 = doPlayerAddItem(pid,2121,1) if isOnline(fid) == TRUE and isOnline(sid) == TRUE then if getDistanceBetween(tmf, tms) <= 3 then setPlayerStorageValue(cid,3066,2) setPlayerStorageValue(pid,3066,2) doCancelMarryStatus(fid) doCancelMarryStatus(sid) setPlayerPartner(cid,sid) setPlayerPartner(pid,fid) doItemSetAttribute(ring, "description", "" .. getCreatureName(cid) .. " & " .. getCreatureName(pid) .. " forever - married on " ..os.date(dateFormat).. ".") doItemSetAttribute(ring2, "description", "" .. getCreatureName(cid) .. " & " .. getCreatureName(pid) .. " forever - married on " ..os.date(dateFormat).. ".") doCreatureSay(cid, text[chance1], TALKTYPE_ORANGE_1) doCreatureSay(pid, text[chance2], TALKTYPE_ORANGE_1) doSendMagicEffect(tmf, 35) doSendMagicEffect(tms, 35) selfSay('Congratulations! Now you may kiss your partner! Everytime you wanna make this effect, just say {love}. You must be close to your partner.', cid) talkState[talkUser] = 0 else selfSay('Your partner must be close to you so you can marry!', cid) talkState[talkUser] = 0 end else selfSay('You and your new partner must be online at the same time.', cid) talkState[talkUser] = 0 end elseif msgcontains(msg, 'cancel') then local fid = getPlayerGUID(cid) local sid = getMarryStatus(fid) local marryname = getPlayerNameByGUID(sid) local pid = getPlayerByNameWildcard(marryname) if isOnline(sid) == TRUE then setPlayerStorageValue(pid,3066,-1) end doCancelMarryStatus(sid) selfSay('You just canceled your wedding date with {' .. marryname .. '}.', cid) talkState[talkUser] = 0 end elseif talkState[talkUser] == 5 then if msgcontains(msg, 'cancel') or msgcontains(msg, 'yes') then local fid = getPlayerGUID(cid) setPlayerStorageValue(cid,3066,-1) doCancelMarryStatus(fid) talkState[talkUser] = 0 end elseif talkState[talkUser] == 6 then if msgcontains(msg, 'yes') then local fid = getPlayerGUID(cid) local sid = getPlayerPartner(cid) local marryname = getPlayerNameByGUID(sid) local pid = getPlayerByNameWildcard(marryname) if (isOnline(fid) == TRUE and isOnline(sid) == TRUE) then setPlayerStorageValue(cid,3066,-1) setPlayerStorageValue(pid,3066,-1) setPlayerPartner(cid,0) setPlayerPartner(pid,0) selfSay('You\'ve just divorced of your old partner.', cid) talkState[talkUser] = 0 else selfSay('You and your new partner must be online at the same time.', cid) talkState[talkUser] = 0 end end end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Em data/lib/functions.lua adicione no final (depois do END): function getPlayerMarriage(player) local rows = db.getResult("SELECT `marriage` FROM `players` WHERE `id` = " .. player .. ";") local marry = rows:getDataInt("marriage") if marry ~= 0 then return marry else return FALSE end end function addMarryStatus(player,partner) db.executeQuery("UPDATE `players` SET `marrystatus` = " .. partner .. " WHERE `id` = " .. player .. ";") return TRUE end function doCancelMarryStatus(player) db.executeQuery("UPDATE `players` SET `marrystatus` = 0 WHERE `id` = " .. player .. ";") return TRUE end function getMarryStatus(player) local stat = db.getResult("SELECT `id` FROM `players` WHERE `marrystatus` = " .. player .. ";") if(stat:getID() == -1) then return FALSE else local info = stat:getDataInt("id") return info end end function getOwnMarryStatus(player) local stat = db.getResult("SELECT `marrystatus` FROM `players` WHERE `id` = " .. player .. ";") if(stat:getID() == -1) then return FALSE else local info = stat:getDataInt("marrystatus") return info end end function isOnline(player) local rows = db.getResult("SELECT `online` FROM `players` WHERE `id` = " .. player .. ";") local on = rows:getDataInt("online") if on ~= 0 then return TRUE else return FALSE end end Agora adicione a query(mysql): ALTER TABLE `players` ADD `marrystatus` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `marriage` ; Simples assim! Retirei todos os bugs, não apareçe nenhum erro no distro/executavel. Espero que gostem! PS: não sei se funfa nas versões anteriores ou superiores, não testei. Créditos: Mulizeu 80% Eu 20%
  11. Olla Galerinha Estou Lhes Trazendo Meu Systema De Pk Em Monstro ! Quem Quiser Aprender Segue Esse Post De Baixo ! Vá Em Data/Monster/ é Procure O Monstro que Vc Quer Deixar Pk e Abrao Como Bloco De Notas Coloque Isto <flag Skull="5" /> Tem 5 Tipos De Skulls 1 pk Nao Aparesse 2 Nao Aparesse Ainda 3 Pk Normal 4 Red 5 Black Segue O Exemplo Há Baixo ! Exemplo ! Flags Yellow e Green ! Bom Ae Esta Meu Systema De Skull Monster ! Boa Sorte Em Seu Ot ! :]
  12. Pessoal vim trazer o script npc vendedor de vip coin ID: 11192. Vá em data/npcs e crie um arquivo chamado Vip Coin.lua e coloque: <?xml version="1.0" encoding="UTF-8"?> <npc name="Vip Coin Seller" script="data/npc/scripts/default.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="302" head="0" body="114" legs="94" feet="0" addons="3"/> <parameters> <parameter key="module_shop" value="1"/> <parameter key="message_greet" value="Ola |PLAYERNAME|. Eu vendo Vip Coins. Diga {trade}."/> <parameter key="shop_buyable" value="vip coin,11192,100000"/> </parameters> </npc> Vermelho --> Nome do item Verde --> ID do item Azul --> Preço do item Laranja --> Nome do Npc Roxo --> Outfit do Npc Comentem e de um rep+ ae. Npc criado por min!
  13. Aqui estão todos os looktype até a versão 10.75. (UPLOADING.......) Use Ctrl+F para localizar o looktype desejado. tabela de cores com seus respectivos numeros:
  14. È um npc de apostar, ele possuiu "por inquanto" dois jogos 21 e Jogo dos 6 . ~~> Explicando o 21 <~~ O 21 funciona assim: Você ira ganhar 1 número e o número tem quer ser 21, ou chegar o mais próximo possível sem ultrapassar esse valor. E a mesma coisa será feita com o npc, ele ganhará 1 número. Você pode ir comprando mais números dizendo [comprar] e se quiser parar é só dizer [parar]. Se seu número for maior que o do npc, você leva o triplo do dinheiro apostado. ~~> Explicando o Jogo do 6 <~~ O Jogo do 6 funciona assim: O npc vai rodar um dado, e se cair no número 6 você ganha o sêxtuplo (6 vezes) do valor apostado. Caso não caia no 6, você perde apenas o dinheiro da aposta. Legal né? Instalando o npc -> Vá até a pasta data/npc e crie um arquivo xml com o nome lasvegas.xml e cole esse codigo dentro: <?xml version="1.0" encoding="UTF-8"?> <npc name="Apostador" script="data/npc/scripts/apostador_la.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="138" head="96" body="95" legs="0" feet="95" addons="0"/> <parameters> <parameter key="message_greet" value="Como vai? |PLAYERNAME|, Quer {apostar} comigo?" /> <parameter key="module_keywords" value="1" /> </parameters> </npc> -> Vá até a pasta data/npc/scripts e crie um arquivo lua com o nome apostador_la.lua e cole esse codigo dentro: -- Preços das apostas -- price_21 = 1000 -- 1k ou 1000gold price_jogo6 = 5000 local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if(msgcontains(msg, 'apostar')) then selfSay('Eu faço 2 jogos: {21},{Jogo do 6} escolha um deles!', cid) talkState[talkUser] = 5 elseif (msgcontains(msg, 'Jogo do 6') and talkState[talkUser] == 5) then selfSay('O Jogo do 6 funciona assim: Eu vou rodar um dado, e se cair no número 6 você ganha o sêxtuplo (6 vezes) do valor apostado.', cid) selfSay('Caso não caia no 6, você perde apenas o dinheiro da aposta.', cid) selfSay('Está pronto para {começar}?.', cid) talkState[talkUser] = 3 elseif(msgcontains(msg, 'começar') and talkState[talkUser] == 3) then selfSay('Você possui o {dinheiro} da aposta ('..price_jogo6..')golds ?', cid) if doPlayerRemoveMoney(cid, price_jogo6) == TRUE then talkState[talkUser] = 2 else selfSay('Desculpe, mais você não tem dinheiro para apostar comigo.',cid) end elseif(msgcontains(msg, 'dinheiro') and talkState[talkUser] == 2) then sorteio6 = math.random(1,6) if sorteio6 == 6 then talkState[talkUser] = 3 selfSay('Parábens, o número sorteado foi 6 e você acaba de ganhar '..(price_jogo6*6) ..'golds, mais o dinheiro que você pagou da aposta.',cid) doPlayerAddMoney(cid,price_jogo6*6) else talkState[talkUser] = 2 selfSay('Que azar, o número sorteado foi '..sorteio6..', mais sorte na proxima.',cid) end elseif(msgcontains(msg, '21') and talkState[talkUser] == 5) then selfSay('O 21 funciona assim: Você ira ganhar 1 número e o número tem quer ser 21, ou chegar o mais próximo possível sem ultrapassar esse valor.', cid) selfSay('E a mesma coisa será feita comigo, ganharei 1 número.', cid) selfSay('Você pode ir comprando mais números dizendo [comprar] e se quiser parar é só dizer [parar].', cid) selfSay('Se você ganhar de mim, você leva o triplo do dinheiro apostado.', cid) selfSay('Está pronto para {começar}?.', cid) talkState[talkUser] = 0 elseif(msgcontains(msg, 'começar') and talkState[talkUser] == 0) then selfSay('Você possui o {dinheiro} da aposta ('..price_21..')golds ?', cid) talkState[talkUser] = 1 elseif(msgcontains(msg, 'dinheiro') and talkState[talkUser] == 1) then if doPlayerRemoveMoney(cid, price_21) == TRUE then talkState[talkUser] = 0 local mpn = math.random(1,21) setPlayerStorageValue(cid, 55411,mpn) local pn = getPlayerStorageValue(cid, 55411) selfSay('Seu número é '..pn..', quer comprar mais ou parar?',cid) else selfSay('Desculpe, mais você não tem dinheiro para apostar comigo.',cid) end elseif(msgcontains(msg, 'comprar') and talkState[talkUser] == 0) then local cp = math.random(1,10) setPlayerStorageValue(cid, 55411, (getPlayerStorageValue(cid, 55411))+cp) selfSay('Seu número é '..getPlayerStorageValue(cid, 55411)..', quer comprar mais ou parar?',cid) talkState[talkUser] = 0 elseif(msgcontains(msg, 'parar') and talkState[talkUser] == 0) then local npcn = math.random(15,21) setPlayerStorageValue(cid, 2224, npcn) if getPlayerStorageValue(cid, 55411) < getPlayerStorageValue(cid, 2224)then selfSay('Meu número é '..getPlayerStorageValue(cid, 2224)..'.',cid) selfSay('Seu número final é '..getPlayerStorageValue(cid, 55411)..'.',cid) selfSay('Ganhei, mais sorte na proxima vez.',cid) talkState[talkUser] = 1 elseif getPlayerStorageValue(cid, 55411) == getPlayerStorageValue(cid, 2224) then selfSay('Meu número é '..getPlayerStorageValue(cid, 2224)..'.',cid) selfSay('Seu número final é '..getPlayerStorageValue(cid, 55411)..'.',cid) selfSay('Empato, portanto ninguem ganha nada.',cid) talkState[talkUser] = 1 elseif getPlayerStorageValue(cid, 55411) > getPlayerStorageValue(cid, 2224) then selfSay('Meu número é '..getPlayerStorageValue(cid, 2224)..'.',cid) selfSay('Seu número final é '..getPlayerStorageValue(cid, 55411)..'.',cid) local somag = (price_21*3) selfSay('Você ganhou '..somag..'golds, mais os seus '..price_21..'golds de volta. Parábens !!!',cid) doPlayerAddMoney(cid, somag) doPlayerAddMoney(cid, price_21) talkState[talkUser] = 1 else selfSay('Desculpe, mais você não possui dinheiro está aposta',cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Pronto Npc Instalado CreditoS: Haiorya - Comando157
  15. Nome: Guard Tipo: NPC Autor: Oneshot Muitos devem conhecer o NPC Guard, que possui inteligência artificial e ataca jogadores que possuem skulls de servidores que baixam. Acontece que o script desse NPC foi programado apenas para um NPC só, então quando você tenta, por exemplo, ter dois Guards no servidor, se um está na cidade A e outro na cidade B e, por exemplo, o NPC da cidade A começa atacar um jogador, o NPC da cidade B se teleporta "magicamente" para a cidade A. Pensando nisso, resolvi otimizar todo o código, orientando ele a objetos. Isso faz com que cada NPC (objeto) tenha suas próprias variáveis e não compartilhem mais elas entre si. Em data/npc/lib, crie um arquivo chamado guard.lua e adicione o conteúdo abaixo: Guard = { config = { attackspeed = 1000, }, combat = {type = COMBAT_PHYSICALDAMAGE, min = 100, max = 200} } function Guard:new() local ret = {} setmetatable({}, {__index = self.combat}) setmetatable(ret, {__index = self}) return ret end function Guard:reset() self.config = Guard.config self.target = 0 selfFollow(0) doTeleportThing(self.id, self.position) end function Guard:updateTarget() if self.target ~= 0 then return end local creatures = getSpectators(getThingPosition(self.id), self.range, self.range, false) for i = 1, #creatures do local target = creatures[i] if isCreature(target) and not isNpc(target) and getCreatureSkull(target) >= 3 then if not getTilePzInfo(getThingPosition(target)) then if selfFollow(target) then selfSay("I don't tolerate people like you, ".. getCreatureName(target)) self.target = target self:attack() break end end else self:reset() end end end function Guard:attack() if self.target == 0 then self:reset() return end self.time = self.time or os.clock() if self.time < os.clock() then if getDistanceBetween(getThingPosition(self.id), getThingPosition(self.target)) == 1 then doTargetCombatHealth(self.id, self.target, self.combat.type, -self.combat.min, -self.combat.max, CONST_ME_DRAWBLOOD) end self.time = self.time + (self.config.attackspeed/1000) end end Agora em data/npc/scripts, crie um arquivo chamado guard.lua e adicione o conteúdo abaixo: local guard = Guard:new() function onCreatureAppear(cid) if cid == getNpcId() then guard.id = getNpcId() guard.target = 0 guard.position = getNpcPos() end end function onCreatureDisappear(cid) if cid == guard.target then guard:reset() end end function onCreatureSay(cid, type, msg) return false end function onThink() guard:updateTarget() if guard.target ~= 0 then if isCreature(guard.target) then guard:attack() else guard:reset() end else guard:reset() end end E em data/npc/ crie um arquivo chamado guard.xml e adicione o conteúdo abaixo: <?xml version="1.0" encoding="UTF-8"?> <npc name="Guard" script="guard.lua" walkinterval="0" speed="200" floorchange="0"> <health now="100" max="100"/> <look type="134" head="57" body="59" legs="40" feet="76" addons="0"/> <parameters/> </npc> Abraços \o
  16. Bom, aqui nem tem muito oque explicar... É um NPC de BANK como todos conhecem' Vamos lá... 1º Passo Vá na pasta "Data / NPC", crie um arquivo com o nome de "Banker.xml", abra o arquivo criado e cole o código abaixo dentro. Obs: O nome do arquivo pode ser o que desejar, só o que está em azul, ou seja, a extensão, que não pode ser alterada' 2º Passo Dentro da pasta "Scripts", crie um arquivo chamado "bank.lua" e dentro do mesmo cole o código abaixo: Salve e feche o arquivo. Agora seu NPC está pronto, basta adicioná-lo ao seu mapa usando o Map Editor. Espero que seja de utilidade de alguém... Abraços e bom uso ae' Script feito por: Vodkart Alterado por: Adriano Swatt Pequeno Tutorial feito por: Adriano Swatt
  17. ANTES DE TUDO ME AJUDE! NÃO SEI SE POSTEI NA ÁREA CERTA! Por Favor Mova! Aprenda a fazer seus próprios Monstros, Spells e NPC Basicamente scripts sao o conjunto dos códigos que formam os arquivos de players, monster, spells, etc. Nesse tutorial vou ensinar tudo, pra vc sair daqui fazendo monstros, spells e tudo mais. E se no final houver alguma duvida poste aqui que serei grato em ajudar. Neste Tutorial existem varios comandos básicos, bons para iniciantes, parte por parte é explicada, visando um maior entendimento sobre o assunto. Vamos lá! SPELLS Primeiro vamos falar sobre as spells Existem as spells de instant e as spells de rune, as spells de instant sao aquelas em q o monstro usa nele, e as de runa ele vai usar em vc. Entao a primeira coisa que precisamos fazer é decidir se vamos fazer uma spell de runa ou de instant, vou mostrar aqui apenas um exemplo, se nao o topico ficara muito grande. Vamos começar, seguindo um exemplo de uma magia minha: Primeiro, crie um arquivo chamado crossover.lua, na pasta Data>Spells>Instant Começamos o script com isso: CODE area = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } Essa é a area em que a magia ira pegar, o numero 0 simboliza os espaços que a magia nao pega e os numeros 1, os lugares onde acontecerá a magia, no exemplo acima, é uma magia em forma de cruz Pulamos entao uma linha e acrescentamos isso: CODE attackType = ATTACK_PHYSICAL needDirection = false areaEffect = NM_ME_YELLOW_RINGS animationEffect = NM_ANI_NONE hitEffect = NM_ME_HIT_AREA damageEffect = NM_ME_DRAW_BLOOD animationColor = BLACK_WHITE offensive = true drawblood = true Vamos às explicações: attackType = o tipo de ataque que será, no exemplo será um ataque fisico, mas tbm poderia ser um ataque de fogo, ou de energy needDirection = se o ataque precisa de direção, como as firewaves areaEffect = o tipo de animação que saira na area na magia animationEffect = a animação de quando o player sofrer dano da magia damageEffect = o efeito que saira quando o player receber o dano animationColor = a cor da animação da Magia offensive = se a magia é de ataque ou nao drawblood = se embaixo do player vai sair sangue quando ele receber a magia Explicado, pulamos uma linha e adicionamos: CODE UltimateExplosionObject = MagicDamageObject(attackType, animationEffect, hitEffect, damageEffect, animationColor, offensive, drawblood, 0, 0) Essa é a função que fara com q oq explicamos acima funcione, pulamos outra linha e acrescentamos: CODE function onCast(cid, creaturePos, level, maglv, var) centerpos = {x=creaturePos.x, y=creaturePos.y, z=creaturePos.z} n = tonumber(var) if n ~= nil then -- bugged -- ultimateExplosionObject.minDmg = var+0 -- UltimateExplosionObject.maxDmg = var+0 UltimateExplosionObject.minDmg = 0 UltimateExplosionObject.maxDmg = 0 else UltimateExplosionObject.minDmg = (level * 2 + maglv * 3) * 2.6 - 30 UltimateExplosionObject.maxDmg = (level * 2 + maglv * 3) * 3.0 end Essa é a fórmula do Dano que o player irá tomar ao receber a magia, agora pra finalizar adiconamos: CODE return doAreaMagic(cid, centerpos, needDirection, areaEffect, area, UltimateExplosionObject:ordered()) end Pronto ja terminamos nossa primeira spell, agora para faze-la funcionar precisamos acrescenta-la aou arquivo spells.xml vamos lá, na pasta Data>Spells abra o arquivo spells.xml e na sessao de INSTANT, acrescente esta linha: CODE spell name="CrossOver" words="crossover" maglv="12" mana="160" enabled="1">/> Explicando: spell name = nome da magia (pode ser qualquer um) words = as palavras magicas que terao que ser ditas pra magia funcionar (tem q ser igual ao nome do script da magia) magvl = maglv necessario para usar essa magia mana = mana que será gasta enabled = se a magia esta abilitada ou nao vocation id = para quais vocações essa magia funcionará, no caso acima ela so funciona pra sorc e druid ------------------ MONSTERS Spell criada, vamos passar para o Monstro que usara esta spell Crie um arquivo .xml com um nome qualquer na pasta Data>Monsters CODE
  18. Olá, venho trazer o um novo tipo de egg system, que eu tive a ideia de criar e quero agradecer a mega ajuda do ONESHOT crie um arquivo na pasta scripts dos npc com nome de eggsystem.lua local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function onCreatureSayCallback(cid, type, msg) local config = { price = 50000, delay = 5 * 60, control = {10555, 10556}, eggn = 4850 } if not npcHandler:isFocused(cid) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, "care") then local p = (config.price % 1000 == 0 and (config.price / 1000) or config.price) if getPlayerStorageValue(cid, config.control) > os.time() then selfSay("Sorry, but I am already caring one of your eggs.", cid) else selfSay("Do you want me to take care of your egg for ".. p .." ".. (p == config.price and "" or "k") .."?", cid) talkState[talkUser] = 1 end elseif msgcontains(msg, "back") then if getPlayerStorageValue(cid, config.control[2]) == 1 then selfSay("Hello, do you came to pick up your egg?", cid) talkState[talkUser] = 2 else selfSay("Sorry, but I am not caring eggs from you.", cid) end elseif msgcontains(msg, "check") then local t = getPlayerStorageValue(cid, config.control[1]) if getPlayerStorageValue(cid, config.control[2]) == -1 then selfSay("Sorry, but I am not caring eggs from you.", cid) else if t < os.time() then selfSay("Yay, your egg has started to hatch, take it.", cid) setPlayerStorageValue(cid, config.control[1], -1) setPlayerStorageValue(cid, config.control[2], -1) else selfSay("I will be caring your egg for more ".. (math.floor((t - os.time()) / 60) > 0 and "".. math.floor((t - os.time()) / 60) .." minutes and" or "") .." ".. (t - os.time()) % 60 .." seconds.", cid) end end end if talkState[talkUser] == 1 then if msgcontains(msg, "yes") then if getPlayerStorageValue(cid, config.control[2]) == -1 then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.control[2], 1) setPlayerStorageValue(cid, config.control[1], os.time()+config.delay) selfSay("Okay! Check back soon.", cid) else selfSay("Sorry, you don't have enough money. You need more ".. (config.price - getPlayerMoney(cid)) .." coins.", cid) end else selfSay("I am already taking care of a egg for you.", cid) end elseif msgcontains(msg, "no") then selfSay("Too pricey for you, heh?", cid) end elseif talkState[talkUser] == 2 then local x = getPlayerStorageValue(cid, config.control) local t = getPlayerStorageValue(cid, config.control[1]) if msgcontains(msg, "yes") then if x > os.time() then local item = doPlayerAddItem(cid, config.eggn, 1) doItemSetAttribute(item, "description", "A hatched egg.") selfSay("Take it!", cid) setPlayerStorageValue(cid, control[2], -1) setPlayerStorageValue(cid, control[1], -1) else selfSay("Sorry, but your egg need care for more ".. (math.floor((t - os.time()) / 60) > 0 and "".. math.floor((t - os.time()) / 60) .." minutes and" or "") .." ".. (t - os.time()) % 60 .." seconds.", cid) end end end return true end npcHandler:setMessage(MESSAGE_GREET, "Hello, |PLAYERNAME|. I am a pet egg carer. Do you want me to {care} your pet eggs? Also you can {check} the egg status and if you have any egg here, you can get it {back}.") npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, onCreatureSayCallback) npcHandler:addModule(FocusModule:new()) Agora crie um npc chamado mary <?xml version="1.0" encoding="UTF-8"?> <npc name="Mary" script="eggsystem.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="138" head="20" body="39" legs="45" feet="7" addons="3"/> </npc> Como Funciona: 1- Você pega um ovo qualquer. 2- Leva para o NPC 3- Ele cuidará dele 4- Depois de um tempo você pega ele de volta Função do NPC: ~> Paga 50k para cuidar do seu ovo ~>Checa o tempo necessário para ele chocar ~>Pegar o ovo chocado
  19. Oi gente do Tibia King vim aqui postar o [Monster] Cientista Maluco. Vá na pasta data/monsters/bosses crie um arquivo chamado cientistamaluco.lua e coloque: <?xml version="1.0" encoding="UTF-8"?> <monster name="Cientista Maluco" nameDescription="a cientista maluco" race="blood" experience="2050000" speed="500" manacost="0"> <health now="5000000000" max="5000000000"/> <look type="133" head="97" body="0" legs="38" feet="97" addons="3" corpse="6080"/> <targetchange interval="5000" chance="30"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> <flag skull="4" /> </flags> <attacks> <attack name="melee" interval="2000" skill="25" attack="20"/> <attack name="drown" interval="2000" chance="8" range="7" radius="3" min="-40000000" max="-60000000"> <attribute key="shootEffect" value="energy"/> <attribute key="areaEffect" value="poff"/> </attack> <attack name="energy" interval="2000" chance="10" range="7" target="1" min="-20000000" max="-36000000"> <attribute key="shootEffect" value="energyball"/> <attribute key="areaEffect" value="energy"/>[/font][/color] </attack> <attack name="speed" interval="2000" chance="7" range="7" target="1" speedchange="-300"> <attribute key="areaEffect" value="redshimmer"/> </attack> </attacks> <defenses armor="15" defense="20"> <defense name="healing" interval="2000" chance="12" min="40000000" max="60000000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> </defenses> <elements> <element firePercent="10"/> <element earthPercent="20"/> <element energyPercent="20"/> <element icePercent="10"/> <element holyPercent="20"/> <element deathPercent="-5"/> </elements> <immunities> <immunity invisible="1"/> </immunities> <voices interval="3000" chance="10"> <voice sentence="Die in the name of Science!"/> <voice sentence="You will regret interrupting my studies!"/> <voice sentence="Let me test this!"/> <voice sentence="I will study your corpse!"/> </voices> <loot> <item id="7620" chance="20350" /><!-- mana potion --> <item id="2148" countmax="100" chance="19550" /><!-- gold coin --> <item id="2148" countmax="12" chance="19550" /><!-- gold coin --> <item id="7618" chance="22100" /><!-- health potion --> <item id="2803" chance="6975" /><!-- powder herb --> <item id="2162" chance="2875" /><!-- magic light wand --> <item id="2177" chance="2525" /><!-- life crystal --> <item id="1987" chance="100000"><!-- bag --> <inside> <item id="2787" countmax="3" chance="5825" /><!-- white mushroom --> <item id="2687" countmax="5" chance="1225" /><!-- cookie --> <item id="6394" chance="1250" /><!-- cream cake --> <item id="7762" chance="1150" /><!-- small enchanted amethyst --> <item id="7440" chance="575" /><!-- mastermind potion --> </inside> </item> </loot> </monster> Agora vá em monsters.xml e adicione: <monster name="Cientista Maluco" file="bosses/cientistamaluco.xml"/> Créditos:Delaks e Ropp Xeys. Comentem.
  20. Bom pessoal, eu estava pesquisando sistemas de npc que vende montaria pela internet e não achei nenhum bom. Então resolvi criar o meu próprio sistema para o alissow server e venho hoje aqui postar ele para vocês. .lua: Ele é simplismente o npc de addons modificado para montarias. E funciona. Sistema de addons + montaria: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end npcHandler:setMessage(MESSAGE_GREET, "Ola |PLAYERNAME|. Voce pode me ajudar? Se voce me ajudar, vou te recompensar com lindos addons e lindas montarias! Basta dizer {addons}, {mounts} ou {ajuda} se voce não sabe o que fazer.") function playerBuyAddonNPC(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if (parameters.confirm ~= true) and (parameters.decline ~= true) then if(getPlayerPremiumDays(cid) == 0) and (parameters.premium == true) then npcHandler:say('Desculpe, mas este addon e apenas para jogadores premium!', cid) npcHandler:resetNpc() return true end if (getPlayerStorageValue(cid, parameters.storageID) ~= -1) then npcHandler:say('Voce ja tem esse addon!', cid) npcHandler:resetNpc() return true end local itemsTable = parameters.items local items_list = '' if table.maxn(itemsTable) > 0 then for i = 1, table.maxn(itemsTable) do local item = itemsTable[i] items_list = items_list .. item[2] .. ' ' .. getItemNameById(item[1]) if i ~= table.maxn(itemsTable) then items_list = items_list .. ', ' end end end local text = '' if (parameters.cost > 0) and table.maxn(parameters.items) then text = items_list .. ' and ' .. parameters.cost .. ' gp' elseif (parameters.cost > 0) then text = parameters.cost .. ' gp' elseif table.maxn(parameters.items) then text = items_list end npcHandler:say('Trouxeste-me ' .. text .. ' por ' .. keywords[1] .. '?', cid) return true elseif (parameters.confirm == true) then local addonNode = node:getParent() local addoninfo = addonNode:getParameters() local items_number = 0 if table.maxn(addoninfo.items) > 0 then for i = 1, table.maxn(addoninfo.items) do local item = addoninfo.items[i] if (getPlayerItemCount(cid,item[1]) >= item[2]) then items_number = items_number + 1 end end end if(getPlayerMoney(cid) >= addoninfo.cost) and (items_number == table.maxn(addoninfo.items)) then doPlayerRemoveMoney(cid, addoninfo.cost) if table.maxn(addoninfo.items) > 0 then for i = 1, table.maxn(addoninfo.items) do local item = addoninfo.items[i] doPlayerRemoveItem(cid,item[1],item[2]) end end doPlayerAddOutfit(cid, addoninfo.outfit_male, addoninfo.addon) doPlayerAddOutfit(cid, addoninfo.outfit_female, addoninfo.addon) setPlayerStorageValue(cid,addoninfo.storageID,1) npcHandler:say('Aqui esta.', cid) else npcHandler:say('Voce nao tem os items necessarios ou dinheiro!', cid) end npcHandler:resetNpc() return true elseif (parameters.decline == true) then npcHandler:say('Este nao lhe interessa? Experimente outro!', cid) npcHandler:resetNpc() return true end return false end local noNode = KeywordNode:new({'no'}, playerBuyAddonNPC, {decline = true}) local yesNode = KeywordNode:new({'yes'}, playerBuyAddonNPC, {confirm = true}) -- mage (done) local outfit_node = keywordHandler:addKeyword({'first mage addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{2182,1}, {2186,1}, {2185,1}, {8911,1}, {2181,1}, {2183,1}, {2190,1}, {2191,1}, {2188,1}, {8921,1}, {2189,1}, {2187,1}, {2392,30}}, outfit_female = 138, outfit_male = 130, addon = 1, storageID = 10023}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second mage addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5903,1}}, outfit_female = 138, outfit_male = 130, addon = 2, storageID = 10024}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- barbarian (done) local outfit_node = keywordHandler:addKeyword({'first barbarian addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5884,1}, {5911,10}, {5886,10}}, outfit_female = 147, outfit_male = 143, addon = 1, storageID = 10025}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second barbarian addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5880,100}, {5892,1}, {5893,50}, {5876,5}}, outfit_female = 147, outfit_male = 143, addon = 2, storageID = 10026}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- druid (done) local outfit_node = keywordHandler:addKeyword({'first druid addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5896,50}, {5897,50}}, outfit_female = 148, outfit_male = 144, addon = 1, storageID = 10027}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second druid addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5906,100}, {5940,1}}, outfit_female = 148, outfit_male = 144, addon = 2, storageID = 10028}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- nobleman (done) local outfit_node = keywordHandler:addKeyword({'first nobleman addon'}, playerBuyAddonNPC, {premium = false, cost = 150000, items = {}, outfit_female = 140, outfit_male = 132, addon = 1, storageID = 10029}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second nobleman addon'}, playerBuyAddonNPC, {premium = false, cost = 150000, items = {}, outfit_female = 140, outfit_male = 132, addon = 2, storageID = 10030}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- oriental (done) local outfit_node = keywordHandler:addKeyword({'first oriental addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5945,1}}, outfit_female = 150, outfit_male = 146, addon = 1, storageID = 10031}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second oriental addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5883,100}, {5895,100}, {5891,1}, {5912,100}}, outfit_female = 150, outfit_male = 146, addon = 2, storageID = 10032}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- warrior (done) local outfit_node = keywordHandler:addKeyword({'first warrior addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5925,15}, {5899,50}, {5884,1}, {5919,1}}, outfit_female = 142, outfit_male = 134, addon = 1, storageID = 10033}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second warrior addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5880,100}, {5887,1}}, outfit_female = 142, outfit_male = 134, addon = 2, storageID = 10034}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- wizard (done) local outfit_node = keywordHandler:addKeyword({'first wizard addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{2536,1}, {2492,1}, {2488,1}, {2123,1}}, outfit_female = 149, outfit_male = 145, addon = 1, storageID = 10035}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second wizard addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5922,50}}, outfit_female = 149, outfit_male = 145, addon = 2, storageID = 10036}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- assassin (done) local outfit_node = keywordHandler:addKeyword({'first assassin addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5912,50}, {5910,50}, {5911,50}, {5913,50}, {5914,50}, {5909,50}}, outfit_female = 156, outfit_male = 152, addon = 1, storageID = 10037}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second assassin addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5804,1}, {5930,10}}, outfit_female = 156, outfit_male = 152, addon = 2, storageID = 10038}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- shaman (done) local outfit_node = keywordHandler:addKeyword({'first shaman addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{5810,1}, {3955,1}, {5015,1}}, outfit_female = 158, outfit_male = 154, addon = 1, storageID = 10039}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second shaman addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{3966,5}, {3967,5}}, outfit_female = 158, outfit_male = 154, addon = 2, storageID = 10040}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- jester (done)(custom) local outfit_node = keywordHandler:addKeyword({'first jester addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{7957,1}}, outfit_female = 270, outfit_male = 273, addon = 1, storageID = 10041}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second jester addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{7958,1}}, outfit_female = 270, outfit_male = 273, addon = 2, storageID = 10042}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- nightmare (done)(custom) local outfit_node = keywordHandler:addKeyword({'first nightmare addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{6500,1500}}, outfit_female = 269, outfit_male = 268, addon = 1, storageID = 10043}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second nightmare addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{6500,1500}}, outfit_female = 269, outfit_male = 268, addon = 2, storageID = 10044}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- yalaharian (done)(custom) local outfit_node = keywordHandler:addKeyword({'first yalaharian addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{9955,1}}, outfit_female = 324, outfit_male = 325, addon = 1, storageID = 10045}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second yalaharian addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{10309,1}}, outfit_female = 324, outfit_male = 325, addon = 2, storageID = 10046}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- Warmaster (done) local outfit_node = keywordHandler:addKeyword({'first warmaster addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{11328,1}}, outfit_female = 335, outfit_male = 336, addon = 1, storageID = 10047}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second warmaster addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{11231,1}}, outfit_female = 335, outfit_male = 336, addon = 2, storageID = 10048}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- Wayfarer (done) local outfit_node = keywordHandler:addKeyword({'first wayfarer addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{12657,1}}, outfit_female = 366, outfit_male = 367, addon = 1, storageID = 10049}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second wayfarer addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{12656,1}}, outfit_female = 366, outfit_male = 367, addon = 2, storageID = 10050}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- Afflicted (done) local outfit_node = keywordHandler:addKeyword({'first afflicted addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{13545,1}, {13543,1}, {13541,1}, {13540,1}, {13542,1}, {13544,1}}, outfit_female = 431, outfit_male = 430, addon = 1, storageID = 10051}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second afflicted addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{13926,1}}, outfit_female = 431, outfit_male = 430, addon = 2, storageID = 10052}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- Deepling (done)(custom) local outfit_node = keywordHandler:addKeyword({'first deepling addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{15435,1}, {15436,1}, {15434,1}}, outfit_female = 464, outfit_male = 463, addon = 1, storageID = 10053}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second deepling addon'}, playerBuyAddonNPC, {premium = false, cost = 0, items = {{15432,1}}, outfit_female = 464, outfit_male = 463, addon = 2, storageID = 10054}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) -- Insectoid (done)(custom) local outfit_node = keywordHandler:addKeyword({'first insectoid addon'}, playerBuyAddonNPC, {premium = false, cost = 50000, items = {}, outfit_female = 466, outfit_male = 465, addon = 1, storageID = 10055}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) local outfit_node = keywordHandler:addKeyword({'second insectoid addon'}, playerBuyAddonNPC, {premium = false, cost = 100000, items = {}, outfit_female = 466, outfit_male = 465, addon = 2, storageID = 10056}) outfit_node:addChildKeywordNode(yesNode) outfit_node:addChildKeywordNode(noNode) keywordHandler:addKeyword({'addons'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Posso te dar mage, nobleman, warrior, barbarian, druid, wizard, oriental, assassin, shaman, nighmare, jester, yalaharian, warmaster, wayfarer, afflicted, deepling e insectoid addons.'}) keywordHandler:addKeyword({'ajuda'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Para ter ajuda com addons fale {help addon} com montaria {help mount}.'}) keywordHandler:addKeyword({'help addon'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Para comprar o primeiro addon fale \'first NAME addon\', Para o segundo addon fale \'second NAME addon\'.'}) function playerBuyMountNPC(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if (parameters.confirm ~= true) and (parameters.decline ~= true) then if(getPlayerPremiumDays(cid) >= 1) and (parameters.premium == true) then npcHandler:say('Desculpe, mas esta montaria e apenas para jogadores premium!', cid) npcHandler:resetNpc() return true end if (getPlayerStorageValue(cid, parameters.storageID) ~= -1) then npcHandler:say('Voce ja tem esta montaria!', cid) npcHandler:resetNpc() return true end local itemsTable = parameters.items local items_list = '' if table.maxn(itemsTable) > 0 then for i = 1, table.maxn(itemsTable) do local item = itemsTable[i] items_list = items_list .. item[2] .. ' ' .. getItemNameById(item[1]) if i ~= table.maxn(itemsTable) then items_list = items_list .. ', ' end end end local text = '' if (parameters.cost > 0) and table.maxn(parameters.items) then text = items_list .. ' and ' .. parameters.cost .. ' gp' elseif (parameters.cost > 0) then text = parameters.cost .. ' gp' elseif table.maxn(parameters.items) then text = items_list end npcHandler:say('Trouxeste-me ' .. text .. ' por ' .. keywords[1] .. '?', cid) return true elseif (parameters.confirm == true) then local mountNode = node:getParent() local mountinfo = mountNode:getParameters() local items_number = 0 if table.maxn(mountinfo.items) > 0 then for i = 1, table.maxn(mountinfo.items) do local item = mountinfo.items[i] if (getPlayerItemCount(cid,item[1]) >= item[2]) then items_number = items_number + 1 end end end if(getPlayerMoney(cid) >= mountinfo.cost) and (items_number == table.maxn(mountinfo.items)) then doPlayerRemoveMoney(cid, mountinfo.cost) if table.maxn(mountinfo.items) > 0 then for i = 1, table.maxn(mountinfo.items) do local item = mountinfo.items[i] doPlayerRemoveItem(cid,item[1],item[2]) end end doPlayerAddMount(cid, mountinfo.mountid) setPlayerStorageValue(cid,mountinfo.storageID,1) npcHandler:say('Aqui esta.', cid) else npcHandler:say('Voce nao tem os items necessarios ou dinheiro!', cid) end npcHandler:resetNpc() return true elseif (parameters.decline == true) then npcHandler:say('Este nao lhe interessa? Experimente outro!', cid) npcHandler:resetNpc() return true end return false end local noNode = KeywordNode:new({'no'}, playerBuyMountNPC, {decline = true}) local yesNode = KeywordNode:new({'yes'}, playerBuyMountNPC, {confirm = true}) -- blazebringer (done)(custom) local mount_node = keywordHandler:addKeyword({'blazebringer'}, playerBuyMountNPC, {premium = false, cost = 10000, items = {}, mountid = 9, storageID = 10057}) mount_node:addChildKeywordNode(yesNode) mount_node:addChildKeywordNode(noNode) -- Donkey (done)(custom) local mount_node = keywordHandler:addKeyword({'donkey'}, playerBuyMountNPC, {premium = false, cost = 10000, items = {}, mountid = 13, storageID = 10058}) mount_node:addChildKeywordNode(yesNode) mount_node:addChildKeywordNode(noNode) -- Rented Horse (done)(custom) local mount_node = keywordHandler:addKeyword({'rented horse 1'}, playerBuyMountNPC, {premium = false, cost = 10000, items = {}, mountid = 22, storageID = 10059}) mount_node:addChildKeywordNode(yesNode) mount_node:addChildKeywordNode(noNode) local mount_node = keywordHandler:addKeyword({'rented horse 2'}, playerBuyMountNPC, {premium = false, cost = 10000, items = {}, mountid = 25, storageID = 10060}) mount_node:addChildKeywordNode(yesNode) mount_node:addChildKeywordNode(noNode) local mount_node = keywordHandler:addKeyword({'rented horse 3'}, playerBuyMountNPC, {premium = false, cost = 10000, items = {}, mountid = 26, storageID = 10061}) mount_node:addChildKeywordNode(yesNode) mount_node:addChildKeywordNode(noNode) -- Shadow Draptor (done)(custom) local mount_node = keywordHandler:addKeyword({'shadow draptor'}, playerBuyMountNPC, {premium = false, cost = 10000, items = {}, mountid = 24, storageID = 10062}) mount_node:addChildKeywordNode(yesNode) mount_node:addChildKeywordNode(noNode) -- Stampor (done)(custom) local mount_node = keywordHandler:addKeyword({'stampor'}, playerBuyMountNPC, {premium = false, cost = 10000, items = {}, mountid = 11, storageID = 10063}) mount_node:addChildKeywordNode(yesNode) mount_node:addChildKeywordNode(noNode) -- Uniwheel (done)(custom) local mount_node = keywordHandler:addKeyword({'uniwheel'}, playerBuyMountNPC, {premium = false, cost = 10000, items = {}, mountid = 15, storageID = 10064}) mount_node:addChildKeywordNode(yesNode) mount_node:addChildKeywordNode(noNode) -- Tin Lizzard (done)(custom) local mount_node = keywordHandler:addKeyword({'tin lizzard'}, playerBuyMountNPC, {premium = false, cost = 10000, items = {}, mountid = 8, storageID = 10065}) mount_node:addChildKeywordNode(yesNode) mount_node:addChildKeywordNode(noNode) keywordHandler:addKeyword({'mounts'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Posso te dar {blazebringer}, {donkey}, {rented horse} de 1 a 3, {shadow draptor}, {stampor}, {uniwheel} e a {tin lizzard}.'}) keywordHandler:addKeyword({'help mount'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Para ter a montaria fale um dos nomes da lista (falando {mounts}) e consiga os items nescessários.'}) keywordHandler:addKeyword({'rented horse'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Existem 3 tipos de rented horse, para compra-los é {rented horse 1}, {rented horse 2} e {rented horse 3} eles são por tempo ilimitado.'}) npcHandler:addModule(FocusModule:new()) Está muito mais prático na configuração e nunca vi um parecido. O sistema é bem simples igual o de addon. Creditos: Eu - Script Pessoa que fez o script do sistema de addon.
  21. Olá galera do tibiaking , me adicionaram muito no msn , pedindo sistema da "Terceira Vocation" com um walk effect system. Script : Um NPC que vende a terceira vocaçao e dá o efeito de walk. Como Funciona : Voce vai lá no npc , e compra sua vocation , quando voce compra o NPC te desloga. e quando voce entrar , voce vai ficar soltando uns efeitos legais Então galera , vamos ao Scripts =x Em Data/XML/Vocations.xml , edite : Voce vai encontrar um <!-- --> , Cobrindo as vocaçoes com os ids (9 , 10 , 11 e 12) , Remova esses sinais . Como está : Como deve Ficar : Agora , Vamos criar o script de Walk System . Explicando : o script de walk system , é um efeito que fica saindo de voce por determinados segundos . o tempo voce edita dentro do script Vá em Data/CreatureScript/Scripts , crie um arquivo .lua chamado walksystem.lua , e lá dentro adicione : Configurando : Local Time = 5 -- é o tempo que irá soltar o efeito "em segundos" Local Storage = -- Aconselho nao mexer. Local Effects = {1,2,3,4} , No Numero 1 , Voce coloca o efeito do S. Sorcerer, no 2 , do Druid , do 3 do Pala e no 4 , do Kina -- Pronto Configurado =x Agora vá em Creaturescript.xml e adicione a seguinte tag : <event type="login" name="WalkSystem" event="script" value="walksystem.lua"/> agora volte na pasta Scripts (do CreatureEvents) e lá em Login.lua , antes do ultimo return true adicione : registerCreatureEvent(cid,"WalkSystem") Agora vamos criar o NPC que vende a vocation Vá em Data/NPC/Scripts , crie um arquivo chamado npcsupreme.lua e lá dentro adicione <?xml version="1.0" encoding="UTF-8"?> <npc name="Feplh" script="duelo.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="139" head="20" body="39" legs="45" feet="7" addons="0"/> <parameter key="message_greet" value="Olá |PlayerName| Voce Deseja Duelar Comigo? {duel}."/> </npc> Então é isso galera , tenha bom proveito Ajudei REP+ , Atrapalhei , REP+ pq eu tentei =x Agora crie um XML , chamado snpc E dentro adicione
  22. Versão testada: 9.1 Descrição: É um npc simples que tem como função alugar determinadas montarias por certo tempo, dias para ser exato. Em Mods: AluguelMount.xml <?xml version="1.0" encoding="UTF-8"?> <mod name="Aluguel Mounts" version="1.0" author="Vodkart" contact="tibiaking.com" enabled="yes"> <config name="aluguel_func"><![CDATA[ Aluguel_mounts = { ["war horse"] = {price = 10000, days = 2, mountid = 17, level = 10, premium = false, storage = 500561}, ["fire war horse"] = {price = 30000, days = 1, mountid = 23, level = 20, premium = false, storage = 500562}, ["sandstone scorpion"] = {price = 50000, days = 1, mountid = 21, level = 30, premium = true, storage = 500563} } function doRemovePlayerMount(cid, mountId) doPlayerRemoveMount(cid, mountId) return doCreatureChangeOutfit(cid,{lookType = getCreatureOutfit(cid).lookType, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet, lookAddons = getCreatureOutfit(cid).lookAddons}) end function CheckRentMount(cid) for var, ret in pairs(Aluguel_mounts) do if canPlayerRideMount(cid, ret.mountid) and getPlayerStorageValue(cid, ret.storage) ~= -1 and getPlayerStorageValue(cid, ret.storage) <= os.time() then doRemovePlayerMount(cid, ret.mountid) doPlayerSendTextMessage(cid,18,"O tempo da sua montaria "..var.." acabou, para adquirir ela novamente volte ao npc.") end end end ]]></config> <globalevent name="CheckMount" interval="60000" event="script"><![CDATA[ domodlib('aluguel_func') function onThink(interval, lastExecution) local on = getPlayersOnline() if #on > 0 then for i = 1, #on do CheckRentMount(on[i]) end end return true end]]></globalevent> </mod> obs: Checar duas coisas em mods, primeira: Se a função que checa se tem a mount é 'canPlayerRideMount' ou 'getPlayerMount', caso for 'getPlayerMount' trocar: canPlayerRideMount(cid, ret.mountid) por: getPlayerMount(cid, ret.mountid) segunda: o intervalo de tempo na tag do globalevents, no meu server era em mile segundos: interval="60000" -- caso o seu não seja em mile segundos troque 60000 por 60. Data/Npc Peach.xml <?xml version="1.0"?> <npc name="Peach" script="data/npc/scripts/aluguelmounts.lua" walkinterval="50000" floorchange="0"> <health now="1000" max="1000"/> <look type="130" head="0" body="114" legs="114" feet="0" addons="0"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|. You want to {rent} a {mount}?"/> </parameters> </npc> Data/Npc/Script aluguelmounts.lua domodlib('aluguel_func') local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid local msg = string.lower(msg) if isInArray({'aluguel','alugar', 'rent', 'mounts', 'mount'}, msg) then npcHandler:say("Você pode comprar {war horse}, {fire war horse} e {sandstone scorpion}!", cid) talkState[talkUser] = 1 elseif talkState[talkUser] == 1 then if Aluguel_mounts[msg] then if Aluguel_mounts[msg].premium == true and not isPremium(cid) then npcHandler:say('Você precisa ser premium para alugar essa montaria.', cid) return true elseif getPlayerLevel(cid) < Aluguel_mounts[msg].level then npcHandler:say('você precisa ter level ' .. Aluguel_mounts[msg].level .. ' ou mais para alugar essa montaria.', cid) return true elseif getPlayerStorageValue(cid, Aluguel_mounts[msg].storage) >= os.time() then npcHandler:say('você já alugou essa montaria!', cid) return true end name,price,stor,days,mountid = msg,Aluguel_mounts[msg].price,Aluguel_mounts[msg].storage,Aluguel_mounts[msg].days,Aluguel_mounts[msg].mountid npcHandler:say('Você quer alugar a montaria '..name..' por '..days..' dia'..(days > 1 and 's' or '')..' no preço de '..price..' gps? {yes}', cid) talkState[talkUser] = 2 else npcHandler:say('Desculpe, eu não vendo essa montaria.', cid) end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 2) then if doPlayerRemoveMoney(cid, price) then doPlayerAddMount(cid, mountid) setPlayerStorageValue(cid, stor, os.time()+days*86400) npcHandler:say('Aqui está sua montaria '..name..', ela irá durar até '..os.date("%d %B %Y %X", getPlayerStorageValue(cid,stor))..'.', cid) else npcHandler:say('você não tem dinheiro suficiente para alugar a montaria!', cid) talkState[talkUser] = 0 end elseif msg == "no" then selfSay("Then not", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Configuração: Em mods tem uma tabela chamada 'Aluguel_mounts'
  23. Olá! A pedidos de muitos, resolvi fazer um npc de reflect que não possui segredo algum. Simplesmente coloque o código que segue abaixo na pasta indicada e pronto. Estará resolvido, você terá um npc que vende items de reflect. Coloque esse arquivo na pasta data\npc Cody.xml <?xml version="1.0" encoding="UTF-8"?> <npc name="Cody" script="data/npc/scripts/Cody.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="143" head="95" body="94" legs="132" feet="86" addons="2"/> </npc> Agora dentro da pasta data\npc\script Cody.lua local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end -- Config -- local reflectid = 2341 local percent = 20 local cost = 10000 function AddReflectItem(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if doPlayerRemoveMoney(cid, cost) then if doPlayerAddReflectedItem(cid, reflectid, percent) then return true else selfSay("No momento estou indisponivel.") doPlayerAddMoney(cid, cost) return false end else selSay("Voce não possui o dinheiro total!") return false end end reflect = keywordHandler:addKeyword({'reflect'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'You want to buy a reflect item? It cost '.. cost ..' gps'}) reflect:addChildKeyword({'yes'}, AddReflectItem, {}) reflect:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then.', reset = true}) npcHandler:addModule(FocusModule:new()) É isso aí, um exemplo simples de como criar um item a sua escolha, só editar o reflectId e com custo em money só editar o cost. Sem mais, Aluccard. Obs: Esqueci de mencionar que É necessário ter o sistema de reflect que se encontra em mods no forum.
  24. lib/functions.lua function getItemsFromList(items) -- by vodka local str = '' if table.maxn(items) > 0 then for i = 1, table.maxn(items) do str = str .. items[i][2] .. ' ' .. getItemNameById(items[i][1]) if i ~= table.maxn(items) then str = str .. ', ' end end end return str end function doRemoveItemsFromList(cid,items) -- by vodka local count = 0 if table.maxn(items) > 0 then for i = 1, table.maxn(items) do if getPlayerItemCount(cid,items[i][1]) >= items[i][2] then count = count + 1 end end end if count == table.maxn(items) then for i = 1, table.maxn(items) do doPlayerRemoveItem(cid,items[i][1],items[i][2]) end else return false end return true end Data/NPC Mount Seller.xml <?xml version="1.0"?> <npc name="Mount Seller" script="data/npc/scripts/buymount.lua" walkinterval="50000" floorchange="0"> <health now="100" max="100"/> <look type="129" head="95" body="116" legs="121" feet="115" addons="3"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|.I have many {mounts} to sell for you!" /> </parameters> </npc> Data/Npc/script buymount.lua local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function AddMount(cid, message, keywords, parameters, node) --by vodka if(not npcHandler:isFocused(cid)) then return false end if (isPlayerPremiumCallback == nil or isPlayerPremiumCallback(cid) == true or parameters.premium == false) then if(parameters.level ~= nil and getPlayerLevel(cid) < parameters.level) then npcHandler:say('You must reach level ' .. parameters.level .. ' to buy this mount.', cid) elseif canPlayerRideMount(cid, parameters.mountid) then npcHandler:say('you already have this mount!', cid) elseif not doRemoveItemsFromList(cid,parameters.items) then npcHandler:say('Sorry You need '..getItemsFromList(parameters.items)..' to buy this mount!', cid) else doPlayerAddMount(cid, parameters.mountid) npcHandler:say('Here is your mount!', cid) npcHandler:resetNpc() end else npcHandler:say('I can only allow premium players to buy this mount.', cid) end npcHandler:resetNpc() return true end local mounts = { {"widow queen", items = {{2124,1},{2393,2}}, mountid = 1, level = 10, premium = false}, {"racing bird", items = {{2494,1},{2393,2}}, mountid = 2, level = 15, premium = true}, {"mounts", text = "I sell these mounts: {widow queen},{racing bird},{war Bear},{black sheep},{midnight panther},{draptor},{titanica},{tin lizzard}.{blazebringer},{rapid boar},{stampor} or {undead cavebear}!"} } for i = 1, #mounts do local get = mounts[i] if type(get.items) == "table" then local node = keywordHandler:addKeyword({get[1]}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "You want to buy the mount " .. get[1] .. " for "..getItemsFromList(get.items).." ?"}) node:addChildKeyword({"yes"}, AddMount, {items = get.items,mountid = get.mountid, level = get.level, premium = get.premium}) node:addChildKeyword({"no"}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "Ok, then.", reset = true}) else keywordHandler:addKeyword({get[1]}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = get.text}) end end mounts = nil npcHandler:addModule(FocusModule:new()) configuração: local mounts = { {"widow queen", items = {{2124,1},{2393,2}}, mountid = 1, level = 10, premium = false}, {"racing bird", items = {{2494,1},{2393,2}}, mountid = 2, level = 15, premium = true}, {"mounts", text = "I sell these mounts: {widow queen},{racing bird},{war Bear},{black sheep},{midnight panther},{draptor},{titanica},{tin lizzard}.{blazebringer},{rapid boar},{stampor} or {undead cavebear}!"} } "nome da montaria" items = {} -- é os items que precisa ter trocar pela mount mountid -- é o id da montaria level -- level necessario para comprar premium -- se precisa ser premium para comprar text -- n precisa mexer,é para saber que montaria ele pode comprar,pode adicionar + nome na lista se quiser adicionando mount então por exemplo war bear: local mounts = { {"widow queen", items = {{2124,1},{2393,2}}, mountid = 1, level = 10, premium = false}, {"racing bird", items = {{2494,1},{2393,2}}, mountid = 2, level = 15, premium = true}, {"war bear", items = {{2123,2},{2124,1},{2173,1}}, mountid = 3, level = 20, premium = false}, {"mounts", text = "I sell these mounts: {widow queen},{racing bird},{war Bear},{black sheep},{midnight panther},{draptor},{titanica},{tin lizzard}.{blazebringer},{rapid boar},{stampor} or {undead cavebear}!"} }
  25. para quem tem problema no !bless Vá em Data>Npc crie uma pasta.xml chamada Tiger Lucan e coloque isso: <?xml version="1.0" encoding="UTF-8"?> <npc name="Tiger Lucan" script="data/npc/scripts/bless.lua" walkinterval="1000" floorchange="0"> <health now="100" max="100"/> <look type="73" head="0" body="0" legs="0" feet="0" addons="0"/> <parameters> <parameter key="message_greet" value="Oi Vendo 5 Tipos de Bless. {First Bless}, {Second Bless}, {Third Bless}, {Fourth Bless}, {Fifth Bless} Voce Quer Comprar?'"/> <parameter key="message_farewell" value="Abra&#231;os.."/> <parameter key="module_keywords" value="1" /> <parameter key="keywords" value="job;" /> <parameter key="keyword_reply1" value="I am a busy man. I run the Ironhouse also im selling bless." /> <parameter key="module_shop" value="1"/> <parameter key="shop_sellable" value="" /> <parameter key="shop_buyable" value="" /> </parameters> </npc> [/codebox] Ok Agora Feche e salve vá em Data>Npc>Scripts crie uma pasta.lua chamada bless e coloque isso dentro: [codebox] local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local node1 = keywordHandler:addKeyword({'first bless'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to buy the first blessing for 10000 gold?'}) node1:addChildKeyword({'yes'}, StdModule.bless, {npcHandler = npcHandler, bless = 1, premium = true, cost = 10000}) node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'Too expensive, eh?'}) local node2 = keywordHandler:addKeyword({'second bless'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to buy the second blessing for 10000 gold?'}) node2:addChildKeyword({'yes'}, StdModule.bless, {npcHandler = npcHandler, bless = 2, premium = true, cost = 10000}) node2:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'Too expensive, eh?'}) local node3 = keywordHandler:addKeyword({'third bless'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to buy the third blessing for 10000 gold?'}) node3:addChildKeyword({'yes'}, StdModule.bless, {npcHandler = npcHandler, bless = 3, premium = true, cost = 10000}) node3:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'Too expensive, eh?'}) local node4 = keywordHandler:addKeyword({'fourth bless'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to buy the fourth blessing for 10000 gold?'}) node4:addChildKeyword({'yes'}, StdModule.bless, {npcHandler = npcHandler, bless = 4, premium = true, cost = 10000}) node4:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'Too expensive, eh?'}) local node5 = keywordHandler:addKeyword({'fifth bless'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to buy the fifth blessing for 10000 gold?'}) node5:addChildKeyword({'yes'}, StdModule.bless, {npcHandler = npcHandler, bless = 5, premium = true, cost = 10000}) node5:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'Too expensive, eh?'}) npcHandler:addModule(FocusModule:new()) Feche e Salve. Pronto Agora Adicione em Seu Rme, Abra seu Mapa e coloque ele No Lugar Desejado!! Edite ao Seu Gosto. Duvidas e Elogios Somente neste Topico. Abraços...

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...