Sempre posto coisas aqui e nunca sou ajudado..
desanimador.
info
Grupo: Campones
Registrado: 25/06/15
Posts: 30
Reputação: 0
Gênero: Masculino

info
Grupo: Visconde
Registrado: 11/08/10
Posts: 477
Reputação: +175
Gênero: Masculino

O script é comprido, então não li ele todo, mas acho que posso ajudar...
for i, lootTable in ipairs(playertab[3]) do local item = player:addItemRewardBag(lootTable[1].itemId, math.ceil(lootTable[2])) if item then str = str .. item:getNameDescription() .. ", " end end
Você tem que criar a bag antes desse loop for, e durante o loop for você adiciona os itens na bag e depois do end você envia a bag ao player.
Se ainda tiver dificuldade explica passo a passo o que tá acontecendo, e o que você quer que aconteça, exemplo a bag deve ir pro dp do jogador?
info
Grupo: Campones
Registrado: 25/06/15
Posts: 30
Reputação: 0
Gênero: Masculino

@Eskylo Os items ja esta indo para o DEPOT mais o problema que ele vai em items.. não em uma BAG, eu fiz um jeito de ir 1 item por bag ou seja, se o boss me dar 100 items vai ser enviado 100 BAGS com 1 item dentro.
Eu so gostaria que fosse 1 bag por cada boss, matar 1 boss e ir todos os items que sair dele pra 1 bag só... deu pra entender? ja tentei editar essa parte ai mais "bugou" o script...
Poderia fazer um tipo de exemplo pra eu testar?
info
Grupo: Visconde
Registrado: 11/08/10
Posts: 477
Reputação: +175
Gênero: Masculino

local bagId = 2000 -- coloque o id da bagfunction 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") endend
function Player:addItemRewardBag(item)local rewardbag = self:getDepotChest(99, true) return rewardbag:addItemEx(item)end
substitui essas 2 funções
faz muito tempo que não mexo com tfs 1.x então pode ser que dê algum erro, mas tentei ![]()
Editado Julho 15 por Eskylo
info
Grupo: Campones
Registrado: 25/06/15
Posts: 30
Reputação: 0
Gênero: Masculino

@Eskylo amigo, obrigado eu ainda não testei mais creio que será de otima ajuda.
Mais eu achei outro problema nele.. tipo se eu sumonar um monstro e colocar ele para atacar o monstro que tiver na lista do REWARD CHEST (boss) se ele matar o servidor cai... creio que seja porque os items do boss vai ser enviado pro monstro e como ele nao é um jogador o server cai.
Será que tem um jeito de colocar no ONKILL apenas os jogadores que matar receber? se caso não for um jogador não acontece nada será possível isso?
info
Grupo: Visconde
Registrado: 11/08/10
Posts: 477
Reputação: +175
Gênero: Masculino

function onKill(cid, target)local killer = Creature(cid)if not killer:isPlayer() then return trueendtarget = 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())) doDecayItem() target:setDropLoot(false) loot:updateDamage() loot:setRewards() loot:addRewards() corpse:setAttribute('aid', 21584) end end end return trueend
Coloquei uma verificação na onkill, mas não tenho certeza se o problema está aqui mesmo. O script de 1 bag por boss deu certo?
info
Grupo: Campones
Registrado: 25/06/15
Posts: 30
Reputação: 0
Gênero: Masculino

@Eskylo obrigado amigo, deu certo perfeitamente o negocio da BAG e teve o resultado que eu esperava, não esta caindo o server pelo menos do jeito de antes não.
Mais agora tem o problema do summon, tipo se o jogador summonar algum monstro e ele participar ou matar o boss do reward chest o server cai...
Eu coloquei aquilo que voce passou ali no onkill e parece que não deu ![]()
Tem como me ajudar neste caso também?
@Eskylo me desculpe pela demora para responder, é que a maquina que uso para teste teve um problema nela e pedi para formatarem.
Editado Julho 18 por GustavaoTibia


info
Grupo: Campones
Registrado: 25/06/15
Posts: 30
Reputação: 0
Gênero: Masculino
Olá gostaria de pedir uma força pra alguem ai.
Eu gostaria que este script me envie uma BAG por cada boss do reward chest que o jogador matar, atualmente ele esta enviando os items normal so que se eu mato 2 bosses iguais ou diferentes os items fica um em cima do outro, gostaria de separar.
Ex: matou um boss os items vai ser enviado dentro de uma bag ou backpack dependendo do id que colocar, quando eu matar o outro boss vou receber outra bag ou backpack e quando eu ir na ilha pegar os items do reward, lá vai esta 2 bag ou backpack e nao os items tudo juntos
Eu tentei mais consegui apenas enviar 1 item por cada bag ou backpack, ou seja, se eu matar um boss e ganhar 10 item, vai ser enviado 10 bags :\
Por fim o scritp é este:
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 tmpendfunction table.find(t, v) for i,x in pairs(t) do if x == v then return true end endendfunction Player:addItemRewardBag(itemid, count)local rewardbag = self:getDepotChest(99, true) return rewardbag:addItem(itemid, count)endfunction 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 retendBossLoot = {}BossUids = {}function BossLoot:new(boss) if not table.find(BossUids, boss:getId()) then table.insert(BossUids, boss:getId()) return setmetatable({creature=boss}, {__index = BossLoot}) endendfunction 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.") endendfunction 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") endendfunction 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: " for i, lootTable in ipairs(playertab[3]) do local item = player:addItemRewardBag(lootTable[1].itemId, math.ceil(lootTable[2])) if item then str = str .. item:getNameDescription() .. ", " end end str = str:sub(1, #str-2) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, str) end end else error("Error") endendfunction 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())) doDecayItem() target:setDropLoot(false) loot:updateDamage() loot:setRewards() loot:addRewards() corpse:setAttribute('aid', 21584) end end end return trueend