Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. Não, não está incompleto. Existem funções nativas compiladas em servidores que permitem que você edite o outfits.xml com atributos a seu gosto, sem precisar de creaturescripts, dentre outros. Para mais informações, recomendo a leitura deste tutorial: Outfits
  2. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1497) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) function onCastSpell(cid, var) local position = variantToPosition(var) if getTilePzInfo(position) then return false end return doCombat(cid, combat, var) end
  3. Também não, proteção, reflexão, skills, magic level, não podem ser editados por scripts.
  4. local stones = { [8299] = 1, [8302] = 4, [8301] = 7, [8303] = 8, [8310] = 12, } function onUse(cid, item, fromPosition, itemEx, toPosition) if not stones[item.itemid] then return false end if getItemInfo(itemEx.itemid).wieldPosition ~= stones[item.itemid] then doPlayerSendCancel(cid, "You cannot use this stone in this item.") doSendMagicEffect(toPosition, CONST_ME_POFF) return true end if stones[item.itemid] == 12 then doItemSetAttribute(itemEx.uid, "defense", (getItemAttribute(itemEx.uid, "defense") or getItemInfo(itemEx.itemid).defense) + 50) else doItemSetAttribute(itemEx.uid, "armor", (getItemAttribute(itemEx.uid, "armor") or getItemInfo(itemEx.itemid).armor) + 50) end doSendMagicEffect(toPosition, CONST_ME_MAGIC_GREEN) doRemoveItem(item.uid, 1) return true end <action itemid="8299;8301-8303;8310" event="script" value="nome_do_arquivo.lua"/> Cinco scripts em um. E, infelizmente, seu sexto script é inviável, pois não há como editar magic level e skills em itens por funções. Abraços.
  5. Oneshot

    Bug Char

    Isso ocorre devido a um sistema de reputação nativo de Baiaks que foi mal programado, você pode optar por remover ele do creaturescripts.xml e login.lua, ou então postar os creaturescripts dele aqui no tópico para que eu possa dar uma olhada.
  6. Além de ser um NPC restrito aos servidores high-rate, acho que o script pode ser melhorado, trocando os vários if depois do primeiro por elseif, ou, melhor ainda, chamar uma tabela no script com a AI do NPC conforme a palavra-chave dita pelo jogador. Enfim, obrigado pela colaboração.
  7. function onDeath(cid, corpse, deathlist) if(getPlayerSlotItem(cid, CONST_SLOT_NECKLACE).itemid == 10218 and getCreatureSkullType(cid) > 3) then doCreatureSetStorage(cid, 111011, getCreatureStorage(cid, 111011) - 1) if getCreatureStorage(cid, 111011) == 0 then doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_NECKLACE).uid, 1) elseif getCreatureStorage(cid, 111011) < 0 then doCreatureSetStorage(cid, 111011, 999) end doCreatureSetDropLoot(cid, false) end return true end Abraços.
  8. Oneshot

    Adaptar Spell

    local conditions = { [CONDITION_ATTRIBUTES] = { [CONDITION_PARAM_TICKS] = -1, [CONDITION_PARAM_STAT_MAGICLEVEL] = 6, [CONDITION_PARAM_SKILL_MELEE] = 6, [CONDITION_PARAM_SKILL_DISTANCE] = 0, [CONDITION_PARAM_SKILL_SHIELD] = 6, [CONDITION_PARAM_BUFF] = true, [CONDITION_PARAM_SUBID] = 500 }, [CONDITION_HASTE] = { [CONDITION_PARAM_TICKS] = -1, [CONDITION_PARAM_SPEED] = 250, [CONDITION_PARAM_SUBID] = 500 }, [CONDITION_REGENERATION] = { [CONDITION_PARAM_TICKS] = -1, [CONDITION_PARAM_HEALTHGAIN] = 50, [CONDITION_PARAM_HEALTHTICKS] = 50, [CONDITION_PARAM_SUBID] = 500 }, [CONDITION_OUTFIT] = { [CONDITION_PARAM_TICKS] = -1, [addOutfitCondition] = {lookType = 8}, [CONDITION_PARAM_SUBID] = 500 } } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_YELLOW_RINGS) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) for condition, parameters in pairs(conditions) do local condition = createConditionObject(condition) for parameter, value in pairs(parameters) do if parameter == addOutfitCondition then addOutfitCondition(condition, value) else setConditionParam(condition, parameter, value) end end setCombatCondition(combat, condition) end local function transform(cid) if getCreatureMana(cid) < 101 then for condition, _ in pairs(conditions) do doRemoveCondition(cid, condition, 500) end doSendMagicEffect(getThingPosition(cid), CONST_ME_YELLOW_RINGS) else doCreatureAddMana(cid, -5) addEvent(transform, 1 * 1000, cid) end end function onCastSpell(cid, var) doCombat(cid, combat, var) addEvent(transform, 1 * 1000, cid) return true end
  9. Olá, JustinnoTibianno Tente trocar KewwordHandler por KeywordHandler. Abraços.
  10. Oneshot

    Pedido Action

    Rapaz, estou vendo que você faz isso em todos os tópicos, inclusive os quais tem os pedidos muito bem explicados. Se você não pode ajudar o dono do tópico de alguma forma, então peço que pare com esses posts. Reportado. Vejamos... Você quer uma área que a cada vez que a alavanca é puxada os spawns lá dentro são trocados por novos? Por exemplo, uma área quadrada com Demons, puxo a alavanca e os Demons somem e aparecem Dragons?
  11. Sim, é possível. Vou pegar como exemplo a magia Berserk, veja abaixo: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) setCombatParam(combat, COMBAT_PARAM_USECHARGES, true) local area = createCombatArea(AREA_SQUARE1X1) setCombatArea(combat, area) function onGetFormulaValues(cid, level, skill, attack, element, factor) local levelTotal, formula = level / 5, 0.0496 local normal, elemental = -(skill * attack * formula + levelTotal), math.ceil((skill * element * formula + levelTotal)) return normal/2, normal, -math.random(elemental/2, elemental) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Basta fazer mais ou menos isso: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) setCombatParam(combat, COMBAT_PARAM_USECHARGES, true) local area = createCombatArea(AREA_SQUARE1X1) setCombatArea(combat, area) function onGetFormulaValues(cid, level, skill, attack, element, factor) local levelTotal, formula = level / 5, 0.0496 local normal, elemental = -(skill * attack * formula + levelTotal), math.ceil((skill * element * formula + levelTotal)) return normal/2, normal, -math.random(elemental/2, elemental) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(cid, var) if getPlayerLevel(cid) < 100 then return doCombat(cid, combat, var) else doPlayerSendCancel(cid, "You cannot use this spell anymore.") return false end end Um grande abraço.
  12. Boa, garoto! Gostei bastante, sistema bem completo e com modificações no código-fonte que o deixam único. Parabéns. \o/ REP+
  13. Pois é, você teria que trocar seu executável por um compilado com esse parâmetro ou então compilar você mesmo. Abraço.
  14. O break é uma palavra-chave que para um loop, no caso, o loop causado pelo for ali no script. Eu usei o for junto com ipairs para percorrer a tabela deathlist retornada pelo creaturescript e quando ele achar um jogador na tabela, eu comando a interrupção da procura por jogadores através do break. Simples assim. Abraço.
  15. Simulação de IPs? Nunca ouvi falar desse método e acho que ele não vai funcionar não, porque você tem que liberar as portas de login e game server (7171 e 7172) no seu roteador.
  16. Essas são funções que só são compiladas com o servidor, quando você declara o uso do War System no código-fonte (sources) com o parâmetro -D__WAR_SYSTEM__
  17. Por exemplo, function onPrepareDeath(cid, deathList) for _, killer in ipairs(deathList) do if isMonster(killer) then doCreatureSetDropLoot(cid, false) break end end return true end
  18. Sim, claro que dará. Ele checa todos os tipos de moeda.
  19. Na verdade, LuckOake, depende muito da versão do servidor usada. Nos servidores mais atuais, a função onPrepareDeath e a função onDeath retornam uma tabela com todas as criaturas que estavam atacando na hora da execução do evento: onDeath(cid, corpse, deathList) onPrepareDeath(cid, deathList) Antigamente elas retornavam dois parâmetros, um que retornava a criatura que causou maior dano e o outro que retornava a criatura que deu o último ataque, como usado em seus scripts. O erro então pode estar vindo daí. Um grande abraço.
  20. É que como é um callback, ele ainda checa nas funções normais se o jogador possui o dinheiro normal (gold coins, platinum coins, crystal coins). Por exemplo, vamos dizer que o jogador queira comprar uma Magic Sword que custa 10 gold nuggets, além dos 10 gold nuggets, o jogador vai precisar de 10 gp para comprar o item.
  21. Tutorial muito superficial, só define a função de os.time() e como ela retorna seus valores, o que normalmente pode ser encontrado no Manual de Referência de Lua 5.1 Acho que você poderia abordar algo com Open Tibia, como manipular os.time(), criar intervalos em segundos comparando valores armazenados em storages e não só abordar os.time(), mas também formatação de data e hora com os.date(). Um grande abraço.
  22. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1497) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Dê reputação ao LuckOake, ele só esqueceu de uma linha no script da magia. Lembrando que se você quiser que não ganhe nem hunting e nem pz locked, coloque aggressive="0" na linha da spell no spells.xml. Um grande abraço.
  23. 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 onPlayerEndTrade(cid) npcHandler:onPlayerEndTrade(cid) end function onPlayerCloseChannel(cid) npcHandler:onPlayerCloseChannel(cid) end function onBuyCallback(cid, itemid, subType, amount, ignoreCap, inBackpacks) local shopItem = nil for _, item in ipairs(npcHandler.shopItems) do if(item.id == itemid and item.subType == subType) then shopItem = item break end end if getPlayerItemCount(cid, 2157) < shopItem.buy then npcHandler:say("Sorry, but you do not have enough gold nuggets.", cid) return false end doPlayerRemoveItem(cid, 2157, shopItem.buy) return true end npcHandler:setCallback(CALLBACK_ONBUY, onBuyCallback) npcHandler:addModule(FocusModule:new()) Está bem simples e o jogador precisa ter além dos gold nuggets, o dinheiro normal para que o NPC venda o item. Claro que eu poderia fazer algo bem mais elaborado, mas levaria tempo e não estou interessado. Um grande abraço.
  24. Olá, jhonatanp Use o script abaixo: local monsterSpells = {"Berserk"} function onSay(cid, words, param, channel) local count = getPlayerInstantSpellCount(cid) local msg = "" local spells = {} for j = (count - 1), 0, -1 do local spell = getPlayerInstantSpellInfo(cid, j) if not isInArray(monsterSpells, spell.name) then if spell.level > 0 then if spell.manapercent > 0 then spell.mana = (spell.manapercent / 100) * getCreatureMaxMana(cid) end table.insert(spells, spell) end end end table.sort(spells, function(a, b) return a.level < b.level end) local level = -1 for index, spell in ipairs(spells) do local line = "" if level ~= spell.level then if index > 1 then line = "\n" end line = line .."Spells for Level ".. spell.level .."\n" level = spell.level end msg = msg .. line .. " " .. spell.words .. " - " .. spell.name .. " : " .. spell.mana .. "\n" end doShowTextDialog(cid, 2175, msg) end Com uma pequena observação, você terá que colocar os NOMES das magias que você não quer que apareça no prompt do comando no array monsterSpells, por exemplo, quero que não apareça a magia Haste e Berserk, então: local monsterSpells = {"Berserk", "Haste"} Espero que tenha compreendido Um grande abraço.
  • Quem Está Navegando   0 membros estão online

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