• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [Aporte] Dodge System [Items]

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    1default [Aporte] Dodge System [Items] el Mar Jul 07, 2020 12:23 pm

    Mezzony

    Mezzony
    Miembro
    Miembro
    Hola Amigos De TF

    En Esta Oportunidad Les Vengo A Traer Un Sistema Que Se Le Incorpora Dodge A Los Items En Porcentaje.

    Cada Dodge Que Uses Refinara y Colocara un % Al Item.

    Testeado En TFS 0.3.6

    Pues Vamos:

    1- Vamos A Mods Y Copiamos Cualquier Archivo Y Nombramos Por Extensao.

    Código:
    <?xml version="1.0" encoding="UTF-8"?>
    <mod name="Dodge System" version="0.1" author="Night Wolf" contact="" enabled="yes">
    <event type="login" name="registerDodge" event="script"><![CDATA[
    function onLogin(cid)
    registerCreatureEvent(cid,"dodge")
    return true
    end
    ]]></event>


    <event type="statschange" name="dodge" event="script"><![CDATA[






    function onStatsChange(cid, attacker, type, combat, value)
    if (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) and isCreature(attacker) then
        local max = 40
        local slotPos = {1,2,3,4,5,6,7,8,9}
        local percent = 0.1
        local dodgePercent = 0


    for i = 1, #slotPos do
    if getPlayerSlotItem(cid, slotPos[i]).uid > 1 then
    if getItemDodgePercent(getPlayerSlotItem(cid, slotPos[i]).uid) then
    dodgePercent = dodgePercent + getItemDodgePercent(getPlayerSlotItem(cid, slotPos[i]).uid)
    end
    end
    end
    if dodgePercent >= max then dodgePercent = max end
    if dodgePercent >= math.random (0,80) then
    value = math.ceil(value*(percent))
    doTargetCombatHealth(attacker, cid, combat, -value, -value, 255)
    doSendAnimatedText(getCreaturePos(cid), "Dodge!", 6)
    return false
    end
    end
    return true
    end]]></event>
    </mod>


    Ahora Vamos A Data/Actions/Scripts

    Creamos Un Nuevo Archivo Y Colocamos Esto Dentro:


    Código:
    function isHandItem(uid) -- NW based on Mock
             uid = uid or 0
            if isInArray({1,2,3,4,5,6}, getItemWeaponType(uid)) then
                 return true
             end
             return false
    end


    function getItemDodgePercent(itemuid)
    return getItemAttribute(itemuid, "dodgePercent") or 0
    end


    function setItemDodgePercent(uid, percent)
    doItemSetAttribute(uid, "description", "[Dodge: "..percent.."%]")
    doItemSetAttribute(uid, "dodgePercent", percent)
    end








    function onUse(cid, item, fromPosition, itemEx, toPosition)
    level = 0
    local upgrade = {
    [1] = {min = 1, max = 5, chance = 100},
    [2] = {min = 5, max = 10, chance = 80},
    [3] = {min = 10, max = 20, chance = 60},
    [4] = {min = 20, max = 40, chance = 40},
    [5] = {min = 40, max = 50, chance = 20}
    }


    function isWearing(uid) -- NW based on Mock
             uid = uid or 0
            if isInArray({uid}, getPlayerSlotItem(cid, 1).uid) or isInArray({uid}, getPlayerSlotItem(cid, 4).uid) or isInArray({uid}, getPlayerSlotItem(cid, 7).uid) or isInArray({uid}, getPlayerSlotItem(cid, 8).uid) then
                 return true
             end
             return false
    end




    if isHandItem(itemEx.uid) or isWearing(itemEx.uid) then
    local name = getItemName(itemEx.uid)
    local atual = math.floor(getItemDodgePercent(itemEx.uid)*10)/10
    for i = 1, #upgrade do
    if string.find(tostring(name),"+".. i .."") then
    level = i
    end
    end


    if level >= #upgrade then
    doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"Your item is already on max level, you can't upgrade it any further.")
    return true
    end




    if math.random(0,100) <= upgrade[level + 1].chance then
    doRemoveItem(item.uid, 1)
    doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"You leveled your "..getItemNameById(itemEx.itemid).." to ".. level+1 ..".")
    setItemDodgePercent(itemEx.uid, atual + (math.random(upgrade[level+1].min,upgrade[level+1].max))/10)
    doItemSetAttribute(itemEx.uid,'name', getItemNameById(itemEx.itemid)..' +'..(level+1))
    doSendMagicEffect(toPosition, math.random(28,30))
    else
    doRemoveItem(itemEx.uid, 0)
    doRemoveItem(item.uid, 0)
    doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"Your "..getItemNameById(item.itemid).." has failed and destroyed your "..getItemNameById(itemEx.itemid).." in the process")
    doSendMagicEffect(toPosition, 4)
    end


    else
    doPlayerSendTextMessage(cid, 24,"You cant refine this item.")
    end
    return true
    end


    Ahora En Xml:


    Código:
    <action itemid="ID ITEM" script="nombre del archivo.lua"/>


    Ahora  Data/Libs/050-function

    Y Colocamos Esto Dentro:


    Código:
    function doPlayerAddDodgeItem(cid, itemid, percent)
    local item = doPlayerAddItem(cid, itemid)
    doItemSetAttribute(item, "description", "[Dodge: "..percent.."%]")
    doItemSetAttribute(item, "dodgePercent", percent)
    end



    Esto Es Todo Espero Les Funcione Very Happy

    Creditos:

    50% Tibiaking
    50% Yo Por Repararlo Y Aportarlo Smile

    2default Re: [Aporte] Dodge System [Items] el Miér Jul 08, 2020 1:37 pm

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    gran aporte gracias +1 (y)



    [Aporte] Dodge System [Items] YNU5B25
    https://www.tibiaface.com

    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).