Ir para conteúdo

RigBy

Posts Recomendados

Dodge System

Introdução:

- Fiz esse sistema pra ajuda um cara aqui no xtibia

- Desculpa deu um erro na hora que eu fui posta.

 

O que ele faz:

- O sistema consiste em defender % dos ataques recebidos.
Por Exemplo:
Com 1 de dodge, voce vai ter 10% de chance de defender. Com 10 de dodge (vocês podem editar) você vai ter 50% de chance de defender, cada pedra (8302) que voce usar, sua skill de dodge aumenta em 1 ponto, podendo no maximo ter 100 pontos
Vamos la.
em creaturescript:
dodgecombat.lua
local storagedodge = 98798644 -- storage do dodge
local cor = 35 -- cor do texto
local effect = 30 -- id do magic effect 
local msg = "DODGE!" -- msg
 
local dodge = { 
    {min = 1, max = 2, chance = 10}, -- se o dodge tiver entre 1 e 2 tem 10% de chance de da dodge.
    {min = 3, max = 4, chance = 20}, -- podem ser configurada portanto que não passe do limite
    {min = 5, max = 6, chance = 30}, -- vocês pode adicionar mas se quiserem
    {min = 7, max = 8, chance = 40},
    {min = 9, max = 10, chance = 45},
    {min = 11, max = math.huge, chance = 50}
}
 
function onStatsChange(cid, attacker, type, combat, value)
    if not isCreature(cid) then
        return false
    end
    for _, tudo in pairs(dodge) do
        if getPlayerStorageValue(cid, storagedodge) >= tudo.min and getPlayerStorageValue(cid, storagedodge) <= tudo.max then
            local chancex = math.random(1, 100)
            if chancex <= tudo.chance then
                if combat ~= COMBAT_HEALING then
                    doSendMagicEffect(getCreaturePosition(cid), effect)
                    doSendAnimatedText(getCreaturePosition(cid), msg, cor)
                    return false
                end
            end
        end
    end
    return true
end
Creaturescript.xml tag
<event type="StatsChange" name="CombatDodge" event="script" value="CombatDodge.lua"/>
Login.lua antes do ultimo return true
registerCreatureEvent(cid, "CombatDodge")
em action:
dodgestone.lua
local limite = 100 -- limite de dodge
local storagedodge = 98798644 -- storage do dodge
 
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getPlayerStorageValue(cid, storagedodge) == -1 then
        doPlayerSetStorageValue(cid, storagedodge, (getPlayerStorageValue(cid, storagedodge)) + 2)
        doPlayerSendCancel(cid, " DodgeSKILL:["..getPlayerStorageValue(cid, storagedodge).."/"..limite.."].")
    elseif getPlayerStorageValue(cid, storagedodge) >= -1 and getPlayerStorageValue(cid, storagedodge) <= limite then
        doPlayerSetStorageValue(cid, storagedodge, (getPlayerStorageValue(cid, storagedodge)) + 1)
        doPlayerSendCancel(cid, " DodgeSKILL:["..getPlayerStorageValue(cid, storagedodge).."/"..limite.."].")
        doRemoveItem(item.uid, 1)
    else
        doPlayerSendCancel(cid, "Voce ja chego no maximo.DodgeSKILL:["..getPlayerStorageValue(cid, storagedodge).."/"..limite.."]")
    end
    return true
end
action.xml tag
<action itemid="8302" event="script" value="dodgestone.lua"/>
Comente oque deve melhora, oque ta de errado.
Editado por RigBy
Link para o comentário
Compartilhar em outros sites

  • 5 weeks later...
  • 4 weeks later...

acho que ficaria melhor colocar um "return true" no fim do scopo do primeiro if depois do for,pra n continua o loop atoa.

e tbm coloca o valor da storage numa varivel, n tem nessecidade usar varias veses a função pra pegar o valor.

 

e pra que até 100 se so aumenta até o 11? trolagem com os player isso em.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...