Comparte
Ir abajo
Mapper
Mensajes Mensajes : 42
Ver perfil de usuario

Party Loot Bonus - v. 1.2

el Dom Jul 06, 2014 4:12 am
Información:

Hoy traigo este script de Dantez, con el que añade items al loot si el monstruo se mata junto con una cantidad específica de players, ls quales tienen que estar en party.
Fácil e interesante!

Imágenes:




Script:

Primero vamos creaturescripts/scripts/login.lua, y bajo esto:
Código:
registerCreatureEvent(cid, "AdvanceSave")

Ponemos esto:
Código:
registerCreatureEvent(cid, "PartyBoss")

En creaturescripts/creaturescripts.xml ponemos este tag:
Código:
<event type="kill" name="PartyBoss" event="script" value="partyBoss.lua"/>

Y en creaturescripts/scripts/partyBoss.lua:
Código:
local config = {
    rollItems = 1,
}

local array = {
["Example Boss"] = {
    [2] = {{2160, 15}, {2159, 10}, {2472, 2}},
    [3] = {{2453, 1}},
    [4] = {{2493, 2}}
    },
}

function sendPartyMessage(members, msg)
    for _, pid in pairs(members) do
        doPlayerSendTextMessage(pid, MESSAGE_INFO_DESCR, msg)
    end
return true
end

function dropBonusLoot(items, corpseid, position, members)
local container = doAddContainerItem(getTileItemById(position, corpseid).uid, 1988, 1)
    for _, item in pairs(items) do
        doAddContainerItem(container, item[1], item[2])
    end
    sendPartyMessage(members, createLootMessage(container))
return true
end

function roll(items, members)
    for i=1, #items do
        local numbers, index, num = {}, 0, 0
        for _, person in pairs(members) do
            table.insert(numbers, {person, math.random(1, 100)})
        end
     
        for z, val in ipairs(numbers) do
            if (val[2] > num) then
                num = val[2]
                index = z
            end
        end
        doPlayerAddItem(numbers[index][1], items[1], items[2])
        sendPartyMessage(members, getCreatureName(numbers[index][1]) .. " rolled " .. numbers[index][2] .. " and gained " .. getItemNameById(items[1]) .. ".")
    end
    return true
end

function createLootMessage(container)
local text = "Party loot bonus: "

    for i=0, getContainerSize(container)-1 do
        local item = getContainerItem(container, i)
        if item ~= nil then
            local info = getItemInfo(item.itemid)
            if (item.type > 1 and info.stackable) then
                text = text .. item.type .. " " .. info.plural
            else
                if (info.article) then
                    text = text .. info.article .. " " .. info.name
                else
                    text = text .. info.name
                end
            end
     
            if (getContainerItem(container, i+1).itemid > 0 ) then
                text = text .. ", "
            else
                text = text .. "."
            end
             
        else
            return text
        end
    end
return text
end

function partyMembersCheck(cid, members)
    for _, person in pairs(members) do
        if(getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(person)) > 30) then
            return false
        end
    end
return true
end

function onKill(cid, target, lastHit)
    local corpseid, loot = getMonsterInfo(getCreatureName(target)).lookCorpse, array[getCreatureName(target)]
    if not (loot) or corpseid == nil or not isItemContainer(corpseid) then return true end
 
    if (isInParty(cid)) then
        local members, tab, items = getPartyMembers(getPartyLeader(cid)), 0, {}
        if (partyMembersCheck(cid, members)) then
            if (#members >= table.maxn(loot)) then tab = table.maxn(loot) else tab = #members end
            for i=2, tab do
                if (loot) then
                    for _, it in pairs(loot) do
                        if (it[2] > 1 and not getItemInfo(it[1]).stackable) then
                            for x=1, it[2] do
                                table.insert(items, {it[1], 1})
                            end
                        else
                            table.insert(items, it)
                        end
                    end
                end
            end
             
            if #items > 0 then
                if (config.rollItems > 0) then
                    roll(items, members)
                else
                    addEvent(dropBonusLoot, 0, items, corpseid, getCreaturePosition(target), members)
                end
            end
        else
            doPlayerSendTextMessage(cid, 27, "Some party members are too far away. Bonus inactive.")
        end
    else
        doPlayerSendTextMessage(cid, 27, "Next time take some people in party to get bonus loot.")
    end
return true
end

Configuración:

Para añadir más monstrous solo tenemos que modificar la siguiente parte del script:
Código:
["CREATURE NAME"] = {
-- [NUMBER OF PARTY MEMBERS] = {{ITEM_ID, ITEM_COUNT}, {ITEM2_ID, ITEM2_COUNT}}
    [2] = {{2160, 5}, {2159, 10}, {2472, 2}},
    [3] = {{2453, 1}, {2160, 50}},
    [4] = {{2493, 2}}
    }

Y poner lo que queramos.

Créditos:
Dantez
Volver arriba
Permisos de este foro:
No puedes responder a temas en este foro.