Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Alguém por favor poderia me ajudar. Estou com um script aqui mais não sei como editar ele, pois não tenho conhecimento de Lua e tal. é um mod de items que dropam com atributos dos monstros. Gostaria de saber como posso editar esses atributos que vão vim. gostaria que se pudesse adicionar HP e Mana aqui está o script.

 

Spoiler

<?xml version="1.0" encoding="UTF-8"?>
<mod name="Random Item Stats" enabled="1">
<config name="itemstats_conf"><![CDATA[
-- //
    extra_loot_key = 123 --: optional storage for higher loot rate
    vocation_base_attackspeed = getVocationInfo(1).attackSpeed --: used for attackSpeed stat
-- //
 
tiers, attr = {}, {}
 
tiers['rare'] = {
    color = 66, -- color of 'RARE' text
    extra = {0, 0},
    attrNames = true, -- show attribute names instead of rare
    chance = {
        [1] = 10000,
        [2] = 5000 -- chance for 2nd stat
    }
}
tiers['epic'] = {
    color = 35,
    extra = {7, 20}, -- additional percent bonus
    chance = {
        [1] = 3333,
        [2] = 25000
    }
}
tiers['legendary'] = {
    color = 149,
    extra = {20, 35},
    chance = {
        [1] = 1000,
        [2] = 100000 -- 2 bonuses always
    }
}
 
MELEE = 0
DISTANCE = 1
ARMOR = 2
SHIELD = 3
WAND = 4
DURATION_RING = 5
CHARGES = 6
 
--! attributes
attr['quick'] = {
    attr = 'attackSpeed',
    name = 'Attack Speed',
    percent = {6, 20},
    types = {MELEE, DISTANCE, WAND}
}
attr['fortified'] = {
    attr = 'extraDefense',
    base = 'defense',
    name = 'Defense',
    percent = {7, 25},
    types = {MELEE, SHIELD}
}
attr['deadly'] = {
    attr = 'extraAttack',
    base = 'attack',
    name = 'Attack',
    types = {MELEE},
    percent = {7, 25}
}
attr['strong'] = {
    attr = 'armor',
    name = 'Armor',
    percent = {7, 20},
    types = {ARMOR}
}
attr['hawkeye\'s'] = {
    attr = 'hitChance',
    name = 'Hit Chance',
    percent = {10, 25},
    types = {DISTANCE}
}
--[[ // not available without source edit
attr['farsight'] = {
    attr = 'shootRange',
    name = 'Shoot Range',
    percent = {17, 34},
    types = {DISTANCE, WAND}
}
]]
attr['charged'] = {
    attr = 'charges',
    name = 'Charges',
    percent = {30, 45},
    types = {CHARGES}
}
attr['divine'] = {
    attr = 'duration',
    name = 'Duration',
    percent = {35, 50},
    types = {DURATION_RING}
}
--/ attributes
 
rate = getConfigInfo('rateLoot')
 
if( getConfigInfo('monsterLootMessage') ~= 0 )then
    print('[Notice] Set monsterLootMessage = 0 to prevent duplicate loot messages')
end
]]></config>
 
<event type="kill" name="itemstats" event="script"><![CDATA[
domodlib('itemstats_conf')
 
function round(n, s)
    return tonumber(('%.' .. (s or 0) .. 'f'):format(n))
end
 
function getContentDescription(uid, sep)
    local ret, i, containers = '', 0, {}
    while( i < getContainerSize(uid) )do
        local v, s = getContainerItem(uid, i), ''
        local k = getItemInfo(v.itemid)
        k.name = getItemAttribute(v.uid, 'name') or k.name
        if( k.name ~= '' )then
            if( v.type > 1 and k.stackable and k.showCount )then
                s = v.type .. ' ' .. k.plural
            else
                local article = getItemAttribute(v.uid, 'article') or k.article
                s = (article == '' and '' or article .. ' ') .. k.name
            end
            ret = ret .. (i == 0 and not sep and '' or ', ') .. s
            if( isContainer(v.uid) and getContainerSize(v.uid) ~= 0 )then
                table.insert(containers, v.uid)
            end
        else
            ret = ret .. (i == 0 and not sep and '' or ', ') .. 'an item of type ' .. v.itemid .. ', please report it to gamemaster'
        end
        i = i + 1
    end
    for i = 1, #containers do
        ret = ret .. getContentDescription(containers, true)
    end
    return ret
end
 
local function send(cid, corpse, monster)
    if( isPlayer(cid) )then
        local ret = corpse and isContainer(corpse) and getContentDescription(corpse)
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'))
        local party = getPlayerParty(cid)
        if( party )then
            for _, pid in ipairs(getPartyMembers(party)) do
                doPlayerSendChannelMessage(pid, '', 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'), TALKTYPE_CHANNEL_W, CHANNEL_PARTY)
            end
        end
    end
end
 
local function createLoot(i, ext)
    local item = type(i.id) == 'table' and i.id[math.random(#i.id)] or i.id
    local random = math.ceil(math.random(100000) / ext)
    local tmpItem, f
 
    if( random < i.chance )then
        if i.subType == -1 then
            f = getItemInfo(item)
        end
        tmpItem = doCreateItemEx(item,
            i.subType ~= -1 and i.subType or
            f.stackable and random % i.count + 1 or
            f.charges ~= 0 and f.charges or
            1
        )
    end
 
    if( not tmpItem )then
        return
    end
 
    if( i.actionId ~= -1 )then
        doItemSetAttribute(tmpItem, 'aid', i.actionId)
    end
 
    if( i.uniqueId ~= -1 )then
        doItemSetAttribute(tmpItem, 'uid', i.uniqueId)
    end
 
    if( i.text ~= '' )then
        doItemSetAttribute(tmpItem, 'text', i.text)
    end
 
    local ret, done
 
    for k, v in pairs(tiers) do
        local cur, used = {}, {}
        for i = 1, #v.chance do
            if( math.random(100000) <= v.chance )then
                if( f )then
                    f = getItemInfo(item)
                end
                if( not f.stackable )then
                    for m, n in pairs(attr) do
                        if( not table.find(used, m) and
                        (
                            ( table.find(n.types, MELEE) and table.find({WEAPON_SWORD, WEAPON_CLUB, WEAPON_AXE}, f.weaponType) ) or
                            ( table.find(n.types, DISTANCE) and f.weaponType == WEAPON_DIST and f.ammoType ~= 0 ) or
                            ( table.find(n.types, ARMOR) and f.armor ~= 0 and f.wieldPosition ~= CONST_SLOT_NECKLACE ) or
                            ( table.find(n.types, SHIELD) and f.defense ~= 0 and f.weaponType == WEAPON_SHIELD ) or
                            ( table.find(n.types, WAND) and f.weaponType == WEAPON_WAND ) or
                            ( table.find(n.types, DURATION_RING) and f.wieldPosition == CONST_SLOT_RING and f.transformEquipTo ~= 0 ) or
                            ( table.find(n.types, CHARGES) and table.find({CONST_SLOT_RING, CONST_SLOT_NECKLACE}, f.wieldPosition) and f.charges ~= 0 )
                        ) )then
                            table.insert(cur, m)
                        end
                    end
 
                    if( #cur ~= 0 )then
                        local n = cur[math.random(#cur)]
                        table.insert(used, n)
 
                        n = attr[n]
                        local percent, new, tmp = math.random(n.percent[1] + (v.extra[1] or 0), n.percent[2] + (v.extra[2] or 0))
                        -- hacks
                        if( n.attr == 'duration' )then
                            tmp = getItemInfo(f.transformEquipTo)
                            if tmp.transformDeEquipTo ~= item then
                                break
                            end
                            new = round( tmp.decayTime * (1 + percent / 100) * 1000 )
                        elseif( n.attr == 'attackSpeed' )then
                            new = round( vocation_base_attackspeed / (1 + percent / 100) )
                        elseif( n.attr == 'hitChance' ) then
                            new = round(
                                f.hitChance == -1 and
                                    percent
                                or
                                    f.hitChance * (1 + percent / 100)
                            )
                        else
                            new = round(
                                n.base and
                                    f[n['attr']] + f[n['base']] * (percent / 100)
                                or
                                    f[n['attr']] * (1 + percent / 100)
                            )
 
                            if( new == f[n[n.base and 'base' or 'attr']] )then -- no improvement
                                break
                            end
                        end
 
                        doItemSetAttribute(tmpItem, n.attr:lower(), new)
 
                        local name = getItemAttribute(tmpItem, 'name')
                        if( v.attrNames or not name )then
                            local name = (v.attrNames and used[#used] or k) .. ' ' .. (name or f.name)
                            doItemSetAttribute(tmpItem, 'name', name)
 
                            if( f.article ~= '' )then
                                local article = getArticle(name)
                                if( article ~= f.article )then
                                    doItemSetAttribute(tmpItem, 'article', article)
                                end
                            end
                        end
 
                        local desc = getItemAttribute(tmpItem, 'description') or f.description
                        doItemSetAttribute(tmpItem, 'description', '[' .. n.name .. ': +' .. percent .. '%]' .. (desc == '' and '' or '\n' .. desc))
 
                        ret = k
                    end
                    cur = {}
                    if( #v.chance == i )then
                        done = true
                    end
                end
            else
                done = i ~= 1
                break
            end
        end
        if( done )then
            break
        end
    end
 
    return tmpItem, ret
end
 
local function createChildLoot(parent, i, ext, pos)
    if( not i or #i == 0 )then
        return true
    end
 
    local size, cap = 0, getContainerCap(parent)
    for k = 1, #i do
        if( size == cap )then
            break
        end
        local tmp, ret = createLoot(i[k], ext)
        if( tmp )then
            if( isContainer(tmp) )then
                if( createChildLoot(tmp, i[k].child, ext, pos) )then
                    doAddContainerItemEx(parent, tmp)
                    size = size + 1
                else
                    doRemoveItem(tmp)
                end
            else
                if( ret )then
                    doSendMagicEffect(pos, CONST_ME_MAGIC_GREEN)
                    doSendAnimatedText(pos, ret:upper(), tiers[ret].color)
                end
                doAddContainerItemEx(parent, tmp)
                size = size + 1
            end
        end
    end
 
    return size > 0
end
 
local function dropLoot(pos, v, ext, master, cid, target)
    local corpse
    if( not master or master == target )then -- 0.3/4
        corpse = getTileItemById(pos, v.lookCorpse).uid
        if( isContainer(corpse) )then
            for i = 1, getContainerSize(corpse) do
                doRemoveItem(getContainerItem(corpse, 0).uid)
            end
            local size, cap = 0, getContainerCap(corpse)
            for i = 1, #v.loot do
                if( size == cap )then
                    break
                end
                local tmp, ret = createLoot(v.loot, ext)
                if( tmp )then
                    if( isContainer(tmp) )then
                        if( createChildLoot(tmp, v.loot.child, ext, pos) )then
                            doAddContainerItemEx(corpse, tmp)
                            size = size + 1
                        else
                            doRemoveItem(tmp)
                        end
                    else
                        if( ret )then
                            doSendMagicEffect(pos, CONST_ME_MAGIC_GREEN)
                            doSendAnimatedText(pos, ret:upper(), tiers[ret].color)
                        end
                        doAddContainerItemEx(corpse, tmp)
                        size = size + 1
                    end
                end
            end
        end
    end
    send(cid, corpse, v.description)
end
 
function onKill(cid, target, damage, flags)
    if( (damage == true or bit.band(flags, 1) == 1) and isMonster(target) )then -- 0.3/4
        local v = getMonsterInfo(getCreatureName(target))
        if( v and v.lookCorpse ~= 0 )then
            local s = getCreatureStorage(cid, extra_loot_key)
            addEvent(dropLoot, 0, getThingPos(target), v, s == -1 and rate or s, getCreatureMaster(target), cid, target)
        end
    end
    return true
end
]]></event>
 
<event type="login" name="itemstats_login" event="buffer"><![CDATA[
    registerCreatureEvent(cid, 'itemstats')
]]></event>
 
</mod>

 

Por favor se alguém puder ajudar eu agradeço bastante. Obrigado desde de já !

Editado por Gabrielk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Para editar os atributos é só mexer dentro de cada tabela no attr.

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
  • 1 month later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Jaurez
      .
    • Por Cat
      Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
       
      Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
      Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
                                                                                                                     
      Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
      Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
       
      Downloads
      https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333

      Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
       
    • Por danilo belato
      Fala Galera To Com um problema aki 
       
      quero exporta umas sprites de um server para colocar em outro 
       
      eu clico na sprites ai aparece tds a forma delas do lado de la >>
       
      ai eu clico nela e ponho a opiçao de export mais quando salvo a sprite ela n abri 
       
      aparece isso quando tento vê-la 
       
      visualização não disponível ( no formatos png e bitmap)
       
      Agora no formato idc fala que o paint n pode ler 
       
      me ajudem ae...
    • Por Vitor Bicaleto
      Galera to com o script do addon doll aqui, quando eu digito apenas "!addon" ele aparece assim: Digite novamente, algo está errado!"
      quando digito por exemplo: "!addon citizen" ele não funciona e não da nenhum erro
       
      mesma coisa acontece com o mount doll.. 
    • Por Ayron5
      Substitui uma stone no serve, deu tudo certo fora  esse  erro ajudem  Valendo  Rep+  Grato  

      Erro: data/actions/scripts/boost.lua:557: table index is nil
       [Warning - Event::loadScript] Cannot load script (data/actions/scripts/boost.lua)

      Script:
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo