Ir para conteúdo

Featured Replies

Postado

O problema é que esses rewards chests q tem por aí são tudo umas gambiarras, eu não posso me comprometer em te ajudar e acabar me metendo no meio de uma gambiarra gigantesca que vai deixar nós dois cansados. Se fosse algo oficial ou que eu tivesse feito, com um bug simples eu até podia tentar te dar uma força

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

  • Respostas 6
  • Visualizações 607
  • Created
  • Última resposta

Top Posters In This Topic

Postado
  • Autor

@xWhiteWolf você com certeza não pode fazer um então ne?

mais então o script inteiro ta aqui, eu estou  tentando arrumar diariamente acabo perdendo a paciência e deixando pra la mais depois volto é que preciso muito adicionar um negocio desses no server eu vejo muitos ots por ai que tem.

 

Se pudesse fazer com que o summon ou monstros não cause nenhum dano no boss do reward acho que resolveria o problema.

Será possível fazer isso?

 

Alguém pode tentar me ajudar ai por favor também... opinião é sempre bem vinda.

 

function sort_descending(t)
    local tmp = {}
    for k, v in pairs(t) do
        table.insert(tmp, {k, v})
    end
    table.sort(tmp, function(a, b) return a[2] > b[2] end)
    return tmp
end

function table.find(t, v)
    for i,x in pairs(t) do
        if x == v then
            return true
        end
    end
end

function Player:addItemRewardBag(item)
local rewardbag = self:getDepotChest(99, true)
    return rewardbag:addItemEx(item)
end

function MonsterType:getBossReward(chance, unique)
    local ret = {}
    local function randomItem(lootBlock, chance)
        local randvalue = math.random(0, 100000) / (getConfigInfo("rateLoot") * chance)
        if randvalue < lootBlock.chance then
            if (ItemType(lootBlock.itemId):isStackable()) then
                return (randvalue%lootBlock.maxCount) + 0
            else
                return 1
            end
        end
    end
    local lootBlockList = self:getLoot()
    for _, loot in pairs(lootBlockList) do
        local rd = randomItem(loot, chance)
        if rd then
            if loot.uniquedrop then
                if unique then
                    table.insert(ret, {loot, rd})
                end
            else
                table.insert(ret, {loot, rd})
            end
        end
    end
    return ret
end

BossLoot = {}
BossUids = {}

function BossLoot:new(boss)
    if not table.find(BossUids, boss:getId()) then
        table.insert(BossUids, boss:getId())
        return setmetatable({creature=boss}, {__index = BossLoot})
    end
end

function BossLoot:updateDamage()
    if self.creature then
        local tmp = {}
        local totaldmg = 0
        for killer, damage in pairs(self.creature:getDamageMap()) do
            totaldmg = totaldmg+damage.total
            tmp[killer] = damage.total
        end
        self.players = sort_descending(tmp)
        self.totaldmg = totaldmg
    else
        error("Creature not found.")
    end
end

function BossLoot:setRewards()
    if self.totaldmg and self.creature then
        if getConfigInfo("rateLoot") > 0 then
            local mt = MonsterType(self.creature:getName())
            for i, playertab in ipairs(self.players) do
                local loot
                if i == 1 then
                    loot = mt:getBossReward(playertab[2] / self.totaldmg, true)
                else
                    loot = mt:getBossReward(playertab[2] / self.totaldmg, false)
                end
                table.insert(self.players[i], loot)
            end
        end
    else
        error("Error")
    end
end

local bagId = 20620
function BossLoot:addRewards()
    if self.players and self.players[1] and self.players[1][3] then
        for i, playertab in ipairs(self.players) do
            local player = Player(playertab[1])
            if player then
                local str = "The following items are available in your reward chest: "
                local bagUid = Game.createItem(bagId, 1)
                for i, lootTable in ipairs(playertab[3]) do
                    local item = bagUid:addItem(lootTable[1].itemId, math.ceil(lootTable[2]))
                    if item then
                        str = str .. item:getNameDescription() .. ", "
                    end
                end
                player:addItemRewardBag(bagUid)
                str = str:sub(1, #str-2)
                player:sendTextMessage(MESSAGE_EVENT_ADVANCE, str)
            end
        end
    else
        error("Error")
    end
end

function onKill(cid, target)

target = Monster(target)
    if (target ~= nil) then
        local mt = MonsterType(target:getName())
        if mt:useRewardChest() then
            local loot = BossLoot:new(target)
            if loot then
                local corpse = Item(doCreateItem(MonsterType(target:getName()):getCorpseId(), 1, target:getPosition()))
		corpse:decay()
                target:setDropLoot(false)
                loot:updateDamage()
                loot:setRewards()
		loot:addRewards()
                corpse:setAttribute('aid', 21584)
            end
        end
    end
	return true
end

 

Eu fiz um teste se eu remover isso 

loot:updateDamage()

O server não cai mesmo matando com player, com summon ou ambos juntos.

Isso também pode ajudar não?

 

Editado por GlobalCores (veja o histórico de edições)

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo