Ir para conteúdo
Banner com Efeitos

jonathand

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    jonathand deu reputação a GiovaniRodrigo em [Resolvido] [PEDIDO] NPC Troca Item por outro Item   
    Crie um arquivo chamado Jax.lua na pasta data/npc/scripts 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   local items = {           item1 = {2346, 2349}, -- item1 item que será pedido e que será dado na primeira troca           item2 = {2033, 15515} -- item2 item que será pedido e que será dado na segunda troca } local counts = {           count1 = {1, 1}, -- count1 quantidade que será pedido e que será dado na primeira troca           count2 = {10, 1} -- count2 quantidade que será pedido e que será dado na segunda troca }   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, 'blue note') then                     if getPlayerItemCount(cid, items.item1[1]) >= counts.count1[1] then                               doPlayerRemoveItem(cid, items.item1[1], counts.count1[1])                               doPlayerAddItem(cid, items.item1[2], counts.count1[2])                               selfSay('You just swap '.. counts.count1[1] ..' '.. getItemNameById(items.item1[1]) ..' for '.. counts.count1[2] ..' '.. getItemNameById(items.item1[2]) ..'.', cid)                     else                               selfSay('You need '.. counts.count1[1] ..' '.. getItemNameById(items.item1[1]) ..'.', cid)                     end           elseif msgcontains(msg, 'bar of gold') then                     if getPlayerItemCount(cid, items.item2[1]) >= counts.count2[1] then                               doPlayerRemoveItem(cid, items.item2[1], counts.count2[1])                               doPlayerAddItem(cid, items.item2[2], counts.count2[2])                               selfSay('You just swap '.. counts.count2[1] ..' '.. getItemNameById(items.item2[1]) ..' for '.. counts.count2[2] ..' '.. getItemNameById(items.item2[2]) ..'.', cid)                     else                               selfSay('You need '.. counts.count2[1] ..' '.. getItemNameById(items.item2[1]) ..'.', cid)                     end           end           return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())  
    Crie um arquivo chamado Jax.xml na pasta data/npc e cole isso
     
    <?xml version="1.0" encoding="UTF-8"?> <npc name="Jax" script="Jax.lua" walkinterval="2000" floorchange="0">           <health now="150" max="150" />           <look type="134" head="57" body="59" legs="40" feet="76" corpse="2212" />           <parameters>                     <parameter key="message_greet" value="Hello |PLAYERNAME|. Do not want to make an exchange? I have {blue note} and {bar of gold}." />                     <parameter key="message_farewell" value="Bye bye!" />           </parameters> </npc>  
    Testado e está 100% funcional
     
    Att.
    Giovani Rodrigo
  2. Gostei
    jonathand deu reputação a Kimoszin em [Action] Key Door System   
    Bem pessoal, pensei que uma action dessa ia deixar o servidor de vocês com mais RPG, então resolvi botar a ideia para funcionar.

    - Para que serve?
    Para o seu servidor ficar com mais RPG, serve para quest mais elaboradas

    - Como funciona?
    Você instala a quest e a action no seu servidor, depois para passar na porta, o player ira precisar da chave, quando ele der use, a porta vai se abrir e ficar aberta, quando ele der use denovo a porta irá se fechar e ficar trancada.

    - Qual a vantagem disso?
    Na verdade, quase nenhuma, pois só vai trazer mais RPG para o seu servidor se você tiver criatividade para usa-la, alguns players valorizam isso.

    - Como "instalo" no meu servidor ?
    Simples, vamos adicionar dois scripts em \data\actions\script e adicionar duas linhas em \data\actions\actions.xml

    Vamos lá


    Instalação
    data\actions\scripts\portas.lua

    function onUse(cid, item, fromPosition, itemEx, toPosition) local doors = {[5098]={id=5100}, [5099]={id=5100}, [5101]={id=5102}, [5107]={id=5109}, [5108]={id=5109}, [5110]={id=5111}} local config = { actionid = 1221, -- Uma action normal, só para a portar nao abrir. keyaid = 1222 -- A action que deve ter na key } for i, x in pairs(doors) do if ((itemEx.itemid == i) and (itemEx.actionid == config.actionid) and (item.actionid == config.keyaid)) then doTransformItem(itemEx.uid, x.id) doItemSetAttribute(itemEx.uid, "aid", 0) elseif (itemEx.itemid == x.id) and (itemEx.actionid == 0) and (item.actionid == config.keyaid) then doTransformItem(itemEx.uid, i) doItemSetAttribute(itemEx.uid, "aid", config.actionid) elseif (itemEx.itemid == i) and (itemEx.actionid == 0) and (item.actionid == config.keyaid) then doTransformItem(itemEx.uid, i) doItemSetAttribute(itemEx.uid, "aid", config.actionid) end end return TRUE end data\actions\actions.xml <action itemid="IDdeUmaChave" event="script" value="portas.lua" /> Agora uma quest para ganhar a chave que abre a porta. data\actions\scripts\darkey.lua function onUse(cid, item, fromPosition, itemEx, toPosition) local config = { storage = 3235, -- Uma storage, se quiser nao precisa modificar keyID = 2088, -- ID de uma chave, você pode trocar. aid = 1222, -- ActionID, tem que ser o mesmo do script acima. } if getPlayerStorageValue(cid, config.storage) == -1 then local item = doPlayerAddItem(cid, config.keyID,1) if item then doItemSetAttribute(item, "aid", config.aid) setPlayerStorageValue(cid, config.storage, 1) doPlayerSendCancel(cid, "Você recebeu uma key") end else doPlayerSendCancel(cid, "Desculpe, mais você ja fez essa quest") end end data\actions\actions.xml <action actionid="7777" event="script" value="darkey.lua" /> " Lembrando que o bau, ou qualquer outra coisa, deve conter o action id = 7777 " Se você preferir, aqui tem um NPC que vende a mesma key que é pega na quest. data/npc/Diog.xml <?xml version="1.0"?> <npc name="Diog" script="data/npc/scripts/diog.lua" walkinterval="7000" floorchange="0"> <health now="100" max="100"/> <look type="128" head="76" body="96" legs="114" feet="0" addons="2"/> <parameters> <parameter key="message_greet" value="Olá |PLAYERNAME|! Eu vendo keys, Diga {keys} para saber quais eu vendo e o valor delas." /> <parameter key="module_keywords" value="1" /> <parameter key="keywords" value="keys" /> <parameter key="keyword_reply1" value="Eu vendo {Key Quest Editada} por 1000 gps." /> </parameters> </npc> data/npc/scripts/diog.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 creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid local keys = { ["Key Quest Editada"] = {id_key = 2088, price = 1000, action_id = 1222}, } local m = keys[msg] if (not m) then selfSay("Eu não vendo esta key ", cid) return FALSE end if doPlayerRemoveMoney(cid, m.price) == TRUE then a = doPlayerAddItem(cid, m.id_key, 1) doItemSetAttribute(a, "aid", m.action_id) selfSay("Obrigado, aqui esta sua key", cid) talkState[talkUser] = 0 else selfSay(" Você não tem ".. m.price.." gps para comprar ", cid) talkState[talkUser] = 0 end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())


    Configuração
    Como você viu, eu nao adicionei todas as portas no script portas.lua, então só iram funcionar em um tipo.
    Nao adicionei porque sou preguiçoso, então para você adicionar é simples.
    Só seguir esses parametros [iDPortaFechada]={id=IDPortaAberta}, e adicionar em local doors = {}

    Agora para adicionar mais keys para o npc vender, é muito simples tambem,
    Só você adicionar mais linhas em local keys,
    Siga os parametros ["NomeQueOPlayerTemQueFalar"] = {id_key = IDDaKey, price = PreçoDaKey, action_id = 1222},
    E mudar para quando o player falar com o npc: <parameter key="keyword_reply1" value="Eu vendo {Key Quest Editada} por 1000 gps e {NomeQueOPlayerTemQueFalar} por 122 gps." />

    Script bem facil que eu fiz, qualquer duvida só falar comigo,
    Até mais.

Informação Importante

Confirmação de Termo