Dei uma editada la... pra evitar o floodar mais deu na mesma :\
Por Administrador, 13 de jun. de 2015 em C e C++
info
Grupo: Campones
Registrado: 03/02/14
Posts: 17
Reputação: 0

Dei uma editada la... pra evitar o floodar mais deu na mesma :\
Editado Junho 25 por GlobalCores
info
Grupo: Banidos
Registrado: 20/11/11
Posts: 455
Reputação: +134

Erro meu.
Coloque:
REWARD_CHEST = {
BOSSES = {"Bibby Bloodbath", "Chizzoron the Distorter", "Ferumbras",
"Furyosa", "Gaz'haragoth", "Ghazbaran", "Hirintror",
"Jaul", "Mad Mage", "Mawhawk", "Morgaroth", "Obujos",
"Ocyakao", "Omrafir", "Orshabaal", "Raging Mage",
"Tanjis", "The Mutated Pumpkin", "The Pale Count",
"The Welter", "Tyrn", "White Pale", "Zulazza the Corruptor",
"Zushuka"},
LOOT = {},
DECAY = {},
DEPOT_ID = 99,
CONTAINER = 21518,
EXPIRE = 7*24*60*60, --days to erase stored rewards
STORAGE = 18394, --player storage for chest exhaustion
EXHAUST = 5*60, --time allowed to use again the chest
}
function table.find(t, value, sensitive)
local sensitive = sensitive or true
if(not sensitive and type(value) == 'string') then
for i, v in pairs(t) do
if(type(v) == 'string') then
if(v:lower() == value:lower()) then
return i
end
end
end
return nil
end
for i, v in pairs(t) do
if(v == value) then
return i
end
end
return nil
end
function table.serialize(x, recur)
local t = type(x)
recur = recur or {}
if(t == nil) then
return "nil"
elseif(t == "string") then
return string.format("%q", x)
elseif(t == "number") then
return tostring(x)
elseif(t == "boolean") then
return x and "true" or "false"
elseif(getmetatable(x)) then
error("Can not serialize a table that has a metatable associated with it.")
elseif(t == "table") then
if(table.find(recur, x)) then
error("Can not serialize recursive tables.")
end
table.insert(recur, x)
local s = "{"
for k, v in pairs(x) do
s = s .. "[" .. table.serialize(k, recur) .. "]" .. " = " .. table.serialize(v, recur) .. ", "
end
return s:sub(0, s:len() - 2) .. "}"
end
error("Can not serialize value of type '" .. t .. "'.")
end
function table.unserialize(str)
return loadstring('return ' .. str)()
end
function addContainerItems(container, items)
for k, v in pairs(items) do
if ItemType(k):isContainer() then
local newBag = Container(doCreateItemEx(k, 1))
addContainerItems(newBag, v)
container:addItemEx(newBag)
else
container:addItem(v[1], v[2])
end
end
end
function MonsterType.createLootItem(self, lootBlock, chance)
local lootTable, itemCount = {}, 0
local randvalue = math.random(0, 100000) / (getConfigInfo("rateLoot") * chance)
if randvalue < lootBlock.chance then
if (ItemType(lootBlock.itemId):isStackable()) then
itemCount = randvalue % lootBlock.maxCount + 1
else
itemCount = 1
end
end
while itemCount > 0 do
local n = math.min(itemCount, 100)
itemCount = itemCount - n
table.insert(lootTable, {lootBlock.itemId, n})
end
return lootTable
end
function MonsterType.getBossReward(self, chance)
local result = {}
if getConfigInfo("rateLoot") > 0 then
for _, loot in pairs(self:getLoot()) do
local itemList = self:createLootItem(loot, chance)
if itemList then
for _, item in ipairs(itemList) do
table.insert(result, item)
end
end
end
end
return result
end
function getDecayTime(id)
local decayTime = 0
do
local o = io.open('data/items/items.xml','r')
file = o:read('*a')
o:close()
end
local function sumDecayTime(corpse)
for attr in file:gmatch('<item.-id="' .. corpse ..'"(.-)</item>') do
local decayTo = attr:match('<attribute.-key="decayTo".-value="(.-)".-/>')
local duration = attr:match('<attribute.-key="duration".-value="(.-)".-/>')
decayTime = decayTime + duration
if tonumber(decayTo) > 0 then
sumDecayTime(decayTo)
end
break
end
end
sumDecayTime(id)
return decayTime
end
function loadCorpses()
for _, name in ipairs(REWARD_CHEST.BOSSES) do
if MonsterType(name) ~= nil then
REWARD_CHEST.DECAY[name] = getDecayTime(MonsterType(name):getCorpseId())
end
end
end
addEvent(loadCorpses, 0)
function getPlayerByGUID(guid)
for _, player in ipairs(Game.getPlayers()) do
if guid == player:getGuid() then
return player
end
end
return nil
end
function Player.addReward(self, reward, time, id)
local LootBag = Container(doCreateItemEx(REWARD_CHEST.CONTAINER, 1))
LootBag:setAttribute('text', time)
addContainerItems(LootBag, reward)
if id then
db.query('DELETE FROM player_rewardchest WHERE id = ' .. id .. ';')
end
return self:getDepotChest(REWARD_CHEST.DEPOT_ID, true):addItemEx(LootBag)
end
function doSaveReward(uid, name)
for GUID, items in pairs(REWARD_CHEST.LOOT[uid]) do
local player = getPlayerByGUID(GUID)
if player ~= nil then
player:addReward(items, os.time())
player:sendTextMessage(MESSAGE_INFO_DESCR, 'Your reward container from ' .. name .. ' was moved to your reward chest.')
else
db.query('INSERT INTO player_rewardchest VALUES (NULL, ' .. GUID ..', "' .. table.serialize(items) ..'", ' .. os.time() ..');')
end
end
REWARD_CHEST.LOOT[uid] = nil
end
function Player.updateRewardChest(self)
db.query('DELETE FROM player_rewardchest WHERE TIME_TO_SEC(TIMEDIFF(NOW(), FROM_UNIXTIME(date))) >= '.. REWARD_CHEST.EXPIRE ..';')
local Query = db.storeQuery('SELECT id, reward, date FROM player_rewardchest WHERE player_id = '.. self:getGuid() ..';')
if Query ~= false then
repeat
local rewardBag = table.unserialize(result.getDataString(Query, 'reward'))
self:addReward(rewardBag, result.getDataInt(Query, 'date'), result.getDataInt(Query, 'id'))
until not result.next(Query)
result.free(Query)
end
local depotChest = self:getDepotChest(REWARD_CHEST.DEPOT_ID, true)
for index = (depotChest:getSize() - 1), 0, -1 do
local container = depotChest:getItem(index)
if (container:getAttribute('text') ~= nil) and (tonumber(container:getAttribute('text')) + REWARD_CHEST.EXPIRE < os.time()) then
container:remove()
end
end
return self:setExhaustion(REWARD_CHEST.STORAGE, REWARD_CHEST.EXHAUST)
end
function string.diff(self)
local format = {
{'day', self / 60 / 60 / 24},
{'hour', self / 60 / 60 % 24},
{'minute', self / 60 % 60},
{'second', self % 60}
}
local out = {}
for k, t in ipairs(format) do
local v = math.floor(t[2])
if(v > 0) then
table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
end
end
local ret = table.concat(out)
if ret:len() < 16 and ret:find('second') then
local a, b = ret:find(' and ')
ret = ret:sub(b+1)
end
return ret
end
function doBossReward(monster, corpse)
REWARD_CHEST.LOOT[corpse:getUniqueId()] = {}
corpse:setAttribute('aid', 21584)
corpse:setAttribute('text', corpse:getUniqueId())
for killer, damage in pairs(monster:getDamageMap()) do
local player, str = Player(killer), 'Loot of ' .. MonsterType(monster:getName()):getNameDescription() .. ': '
if player ~= nil then
local rewardBag = doCreateItemEx(REWARD_CHEST.CONTAINER)
if player:getStamina() > 840 then
local loot = MonsterType(monster:getName()):getBossReward(damage.total/monster:getMaxHealth())
if #loot > 0 then
addContainerItems(Container(rewardBag), loot)
REWARD_CHEST.LOOT[corpse:getUniqueId()][player:getGuid()] = loot
str = str .. Container(rewardBag):getContentDescription()
else
str = str .. 'nothing'
end
else
str = str .. 'nothing (due to low stamina)'
end
player:sendTextMessage(MESSAGE_INFO_DESCR, str .. '.')
end
end
addEvent(doSaveReward, REWARD_CHEST.DECAY[monster:getName()]*1000, corpse:getUniqueId(), MonsterType(monster:getName()):getNameDescription())
end
end
end
info
Grupo: Campones
Registrado: 03/02/14
Posts: 17
Reputação: 0

O erro ainda continua.
Editado Junho 25 por GlobalCores
Tira os dois últimos ends.
info
Grupo: Lorde
Registrado: 17/01/09
Posts: 2.1k
Reputação: +395
Char no Tibia: Adra Sata

Daniel arruma esse tutorial ai.
Tem várias partes que tu copio que ta bugado e diferente da otland.
info
Grupo: Campones
Registrado: 03/02/14
Posts: 17
Reputação: 0

Tira os dois últimos ends.
Quando dei reload apareceu isso
[Warning - Event::checkScript] Event onKill not found. scripts/reward_chest.lua
Acho que não tem:
function onKill(cid, target)
info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

Na verdade esse sistema ainda não está funcionando como deveria...(similar ao global)
Referente ao que estão dizendo aqui,
Vou dar uma olhada e ver o que tem de errada no tópico.
Editado Junho 26 por Bruno Minervino
info
Grupo: Campones
Registrado: 03/02/14
Posts: 17
Reputação: 0

To procurando arrumar ele pra TFS 1.0 :S, ja coloquei nas sources so falta os scripts
info
Grupo: Banidos
Registrado: 20/11/11
Posts: 455
Reputação: +134

To procurando arrumar ele pra TFS 1.0 :S, ja coloquei nas sources so falta os scripts
Os codes que você enviou não são para 1.0
info
Grupo: Campones
Registrado: 03/02/14
Posts: 17
Reputação: 0

Os codes que você enviou não são para 1.0
Que codes? para adicionar nas sources? eu adicionei e compilei e deu certo, como que é o certo então?
info
Grupo: Banidos
Registrado: 20/11/11
Posts: 455
Reputação: +134

Que codes? para adicionar nas sources? eu adicionei e compilei e deu certo, como que é o certo então?
Os codes são os códigos que colocamos na source.
Esse reward está totalmente pra tfs 1.2, pois ele tem as novas funções.
Os scripts há como passar pra funcionar no 1.0, mas estou fazendo um baseado nos bosses da warzone reconhecendo os danos aderidos dos jogadores, fica mais fácil, não fica 100% global mas acho mais prático e sem intervenções nas sources.
info
Grupo: Marquês
Registrado: 03/02/13
Posts: 1.2k
Reputação: +254
Gênero: Masculino
Char no Tibia: Partiu Baladinha

Aqui tá meio louco.. instalei, compilei, e etc... porém, ao tentar fazer login no servidor não faz... só fica carregando, eu removo o creaturescripts volta normalmente.
info
Grupo: Lorde
Registrado: 17/01/09
Posts: 2.1k
Reputação: +395
Char no Tibia: Adra Sata

Eu já avisei que o código ta errado.
ele deu ctrl + c e ctrl + v e esqueceu algumas partes ...
sugiro que olhe na otland porém é english , eu fiz e deu certinho .. até dei umas modificadas nos arquivos pra ficar mais legal
info
Grupo: Campones
Registrado: 14/06/10
Posts: 1
Reputação: 0
Char no Tibia: Magrelin Stoen
alguém sabe se ta funcionando no tfs 1.2?
info
Grupo: Banidos
Registrado: 20/11/11
Posts: 455
Reputação: +134
O Erro parou? no distro