Ir para conteúdo

zipter98

Herói
  • Total de itens

    2553
  • Registro em

  • Última visita

  • Dias Ganhos

    73

Tudo que zipter98 postou

  1. Oi, vi a ideia desse NPC em um lugar por aí e resolvi fazer. Consiste em um NPC que aprimora seu item (deve estar em uma das mãos - esquerda ou direita) a troco de um outro item (configurável). A cada nível de aprimoramento, seu item recebe um valor configurável no ataque, defesa e/ou armadura. Você pode configurar o nível de aprimoramento máximo, chance de falhar, valor adicional que o item receberá a cada aprimoração e, como já dito antes, o item que será cobrado pelo NPC. Em data/npc, crie um arquivo com extensão .XML, nomeie-o Upgrader, e coloque o seguinte conteúdo: <?xml version="1.0" encoding="UTF-8"?> <npc name="Upgrader" script="upgradenpc.lua" walkinterval="3000" floorchange="0" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="134" head="39" body="113" legs="38" feet="0" addons="3" corpse="2212"/> <parameters> <parameter key="message_greet" value="Olá |PLAYERNAME|, voce gostaria de aprimorar o seu equipamento?"/> </parameters> </npc> Em data/npc/scripts, crie um arquivo com extensão .lua, nomeie-o upgradenpc.lua, e coloque o seguinte conteúdo: 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 config = { items = {12343, 10}, --Respectivamente, ID do item que o NPC irá cobrar e quantidade. maxBoost = 10, --Nível máximo do equipamento. failChance = 20, --Em porcentagem. upgradeValue = 1, --Valor adicional que o item receberá a cada aprimoração. } if msgcontains(msg:lower(), "yes") then for slot = 5, 6 do local item = getPlayerSlotItem(cid, slot) if item.uid > 0 then if getItemAttack(item) > 0 or getItemDefense(item) > 0 or getItemArmor(item) > 0 then if doPlayerRemoveItem(cid, config.items[1], config.items[2]) then local newUpgrade = (getItemAttribute(item.uid, "upgrade") or 0) + 1 if newUpgrade <= config.maxBoost then if math.random(1, 100) > config.failChance then doItemSetAttribute(item.uid, "name", getItemInfo(item.itemid).name.." [+"..newUpgrade.."]") if getItemAttack(item) > 0 then setItemAttack(item, getItemAttack(item) + config.upgradeValue) end if getItemDefense(item) > 0 then setItemDefense(item, getItemDefense(item) + config.upgradeValue) end if getItemArmor(item) > 0 then setItemArmor(item, getItemArmor(item) + config.upgradeValue) end doItemSetAttribute(item.uid, "upgrade", newUpgrade) selfSay("Seu equipamento foi aprimorado com sucesso.", cid) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) else selfSay("Aah, parece que a aprimoração falhou! Mais sorte na próxima vez.", cid) end return true else return selfSay("Seu equipamento já alcançou o nível máximo.", cid) end else return selfSay("Você não tem "..config._item[2].."x "..getItemNameById(config._item[1])..(config._item[2] > 1 and "s" or "")..".", cid) end end end end selfSay("Parece que você não tem um item para aprimorar.", cid) elseif msgcontains(msg:lower(), "no") then selfSay("Tudo bem, então.") end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Versão testada: 8.54 Bem, é só isso, até mais.
  2. Iterar os jogadores online, insertando-os numa tabela para depois pegar um elemento aleatório dela, na minha opinião, é desnecessário, visto que você poderia somente usar: local players = getPlayersOnline() local winner = players[math.random(#players)] Mas, de resto, o código tá legal, especialmente o segundo. xD
  3. oi
    1. alanmtd

      alanmtd

      zipter preciso de sua ajuda! como faço pra vc me ajudar em um codigo.
  4. Hm, já vi o quê é. Enfim, movido.
  5. 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 ids = {{12149, 12150, 12151}, 2200} local feathers = ids[1] local str = "" local check = 0 local storage = 91821 if msgcontains(msg:lower(), "trade") or msgcontains(msg:lower(), "troca") then for i = 1, #feathers do if str == "" then str = "1 "..getItemNameById(feathers) else str = str..", 1 "..getItemNameById(feathers) end end if getPlayerStorageValue(cid, storage) > -1 then selfSay("You already traded with me.", cid) talkState[talkUser] = 0 return true else selfSay("Do you want trade "..str.." for 1 "..getItemNameById(ids[2]).."?", cid) talkState[talkUser] = 1 return true end elseif msgcontains(msg:lower(), "yes") and talkState[talkUser] == 1 then for i = 1, #feathers do if getPlayerItemCount(cid, feathers) > 0 then check = check + 1 end end if check == #feathers then selfSay("Thank you!", cid) for i = 1, #feathers do doPlayerRemoveItem(cid, feathers, 1) end doPlayerAddItem(cid, ids[2], 1) setPlayerStorageValue(cid, storage, 1) talkState[talkUser] = 0 return true else selfSay("Hey, you don't have all the feathers.", cid) talkState[talkUser] = 0 return true end elseif msgcontains(msg:lower(), "no") and talkState[talkUser] == 1 then selfSay("Ok, good bye!") talkState[talkUser] = 0 return true end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  6. Poderá realizar a troca apenas 1 vez por personagem?
  7. Tópico movido para a seção de dúvidas e pedidos resolvidos.
  8. A mensagem seria definida pelo jogador ou no próprio código?
  9. Seu servidor é PDA, né? Nesse caso, você poderia fazer uma condição no exp2.0.lua, verificando se o cid e attacker são summons, e se seus mestres estão em duelo (checando a storage, claro). Aí, você alteraria o valor da variável multiplier. PS: Essa alteração deve ser feita abaixo do bloco onde multiplier é alterado de acordo com o elemento do cid/ataque. E me refiro ao bloco referente à essa condição: if damageCombat ~= COMBAT_PHYSICALDAMAGE and not isInArray(ignored, damageCombat) then
  10. Tópico movido para a seção de dúvidas e pedidos resolvidos.
  11. Movido para dúvidas e pedidos de OTClient.
  12. zipter98

    Storage

    Tópico movido para a seção de dúvidas e pedidos resolvidos.
  13. Cria um arquivo em data/talkactions/scripts com extensão .lua, e coloca nele o código que o Slicer passou. Aí, em talkactions.xml, você coloca a tag que ele mencionou no final do script: <talkaction words="xxxx" event="script" value="yyyy.lua"/> Mude xxxx para a palavra que irá chamar o código (/clan, no seu caso), e yyyy.lua para o nome do arquivo (por exemplo, clan.lua).
  14. Tópico movido para a seção de dúvidas e pedidos resolvidos.
  15. zipter98

    Storage

    Código 1: setPlayerStorageValue(cid, 91832, getPlayerHealth(cid)) Código 2: doPlayerAddHealth(cid, getPlayerStorageValue(cid, 91832) > -1 and getPlayerStorageValue(cid, 91832) or 0) Ou seja, basta armazenar a HP numa storage.
  16. Ou, ao invés de fazer isso do nologout no RME, você pode fazer uma condição por onLogout.
  17. Movido para pedidos e dúvidas de derivados, mais cuidado da próxima vez.
  18. Movido para pedidos e dúvidas de derivados.
  19. Movido para aprovação de tutoriais.
  20. zipter98

    Scripter Lua

  21. doCreatureSetHideHealth(cid, true)
  22. Tópico movido para a seção de dúvidas e pedidos resolvidos.
  23. zipter98

    Função no OTClient

    Movido para dúvidas e pedidos de OTClient, mais cuidado da próxima vez.
  24. Área incorreta, tópico movido. Mais cuidado da próxima vez. Movido à pedido do autor.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...