Marcelo m santos
-
Total de itens
16 -
Registro em
-
Última visita
Tipo de Conteúdo
Perfis
Fóruns
Calendário
Publique
Tudo que Marcelo m santos postou
-
você pode me dar alguma dica de como posso resolver esse erro estou precisando muito pois já venho a dias tentando resolver esse erro
[Error - mysql_real_query] Query: SELECT `id`, `coins`, `description`, `timestamp` FROM `store_history` WHERE `account_id` = 2887 ORDER BY `timestamp` DESC LIMIT 17 OFFSET 0
Message: Unknown column 'id' in 'field list'
[Error - mysql_store_result] Query: SELECT `id`, `coins`, `description`, `timestamp` FROM `store_history` WHERE `account_id` = 2887 ORDER BY `timestamp` DESC LIMIT 17 OFFSET 0
Message: Unknown column 'id' in 'field list'
-
-
E AI AMIGO TUDO BEM. estou com um erro no meu servidor pois o rewardchest só esta abrindo quando eu sumono um monstro
quando ele nasce nolmalmente ele não da loot eo rewardchest não abre .
voce poderia me dar uma ajuda pois já procurei em todos os scripts e nã achei nada
POR FAVOR NÃO SEI MAS OQUE FASER
function onCreatureAppear(self, creature)
if self == creature then
if self:getType():isRewardBoss() then
self:setReward(true)
end
end
endlocal function pushSeparated(buffer, sep, ...)
local argv = {...}
local argc = #argv
for k, v in ipairs(argv) do
table.insert(buffer, v)
if k < argc and sep then
table.insert(buffer, sep)
end
end
endlocal function insertItems(buffer, info, parent, items)
local start = info.running
for _, item in ipairs(items) do
if _ ~= 1 or parent > 100 then
table.insert(buffer, ",")
endinfo.running = info.running + 1
table.insert(buffer, "(")
pushSeparated(buffer, ",", info.playerGuid, parent, info.running, item:getId(), item:getSubType(), db.escapeBlob(item:serializeAttributes()))
table.insert(buffer, ")")if item:isContainer() then
local size = item:getSize()
if size > 0 then
local subItems = {}
for i = 1, size do
table.insert(subItems, item:getItem(i - 1))
endinsertItems(buffer, info, info.running, subItems)
end
end
end
return info.running - start
endlocal function insertRewardItems(playerGuid, timestamp, itemList)
db.asyncStoreQuery('SELECT `pid`, `sid` FROM `player_rewards` WHERE player_id = ' .. playerGuid .. ' ORDER BY `sid` ASC;',
function(query)
local lastReward = 0
local lastStoreId
if query then
repeat
local sid = result.getDataInt(query, 'sid')
local pid = result.getDataInt(query, 'pid')if pid < 100 then
lastReward = pid
end
lastStoreId = sid
until not result.next(query)
endlocal buffer = {'INSERT INTO `player_rewards` (`player_id`, `pid`, `sid`, `itemtype`, `count`, `attributes`) VALUES'}
--reward bag
local info = {
playerGuid = playerGuid,
running = lastStoreId or 100
}local bag = Game.createItem(ITEM_REWARD_CONTAINER)
bag:setAttribute(ITEM_ATTRIBUTE_DATE, timestamp)if itemList then
for _, item in ipairs(itemList) do
bag:addItem(item[1], item[2])
end
endlocal total = insertItems(buffer, info, lastReward + 1, {bag})
table.insert(buffer, ";")if total ~= 0 then
db.query(table.concat(buffer))
end
end
)
endlocal function getPlayerStats(bossId, playerGuid, autocreate)
local ret = globalBosses[bossId][playerGuid]
if not ret and autocreate then
ret = {
bossId = bossId,
damageIn = 0, -- damage taken from the boss
healing = 0, -- healing (other players) done
}
globalBosses[bossId][playerGuid] = ret
return ret
end
return ret
endfunction onDeath(creature, corpse, killer, mostDamageKiller, lastHitUnjustified, mostDamageUnjustified)
local monsterType = creature:getType()
if monsterType:isRewardBoss() then -- Make sure it is a boss
local bossId = creature:getId()
local timestamp = os.time()local totalDamageOut, totalDamageIn, totalHealing = 0.1, 0.1, 0.1 -- avoid dividing by zero
local scores = {}
local info = globalBosses[bossId]
local damageMap = creature:getDamageMap()for guid, stats in pairs(info) do
local player = Player(stats.playerId)
local part = damageMap[stats.playerId]
local damageOut, damageIn, healing = (stats.damageOut or 0) + (part and part.total or 0), stats.damageIn or 0, stats.healing or 0totalDamageOut = totalDamageOut + damageOut
totalDamageIn = totalDamageIn + damageIn
totalHealing = totalHealing + healingtable.insert(scores, {
player = player,
guid = guid,
damageOut = damageOut,
damageIn = damageIn,
healing = healing,
})
endlocal participants = 0
for _, con in ipairs(scores) do
local score = (con.damageOut / totalDamageOut) + (con.damageIn / totalDamageIn) + (con.healing / totalHealing)
con.score = score / 3 -- normalize to 0-1
if score ~= 0 then
participants = participants + 1
end
end
table.sort(scores, function(a, b) return a.score > b.score end)local expectedScore = 1 / participants
for _, con in ipairs(scores) do
local reward, stamina -- ignoring stamina for now because I heard you receive rewards even when it's depleted
if con.player then
reward = con.player:getReward(timestamp, true)
stamina = con.player:getStamina()
else
stamina = con.stamina or 0
endlocal playerLoot
if --[[stamina > 840 and]] con.score ~= 0 then
local lootFactor = 1
lootFactor = lootFactor / participants ^ (1 / 3) -- tone down the loot a notch if there are many participants
lootFactor = lootFactor * (1 + lootFactor) ^ (con.score / expectedScore) -- increase the loot multiplicatively by how many times the player surpassed the expected score
playerLoot = monsterType:getBossReward(lootFactor, _ == 1)if con.player then
for _, p in ipairs(playerLoot) do
reward:addItem(p[1], p[2])
end
end
endif con.player then
local lootMessage = {"The following items are available in your reward chest: "}if --[[stamina > 840]]true then
reward:getContentDescription(lootMessage)
else
table.insert(lootMessage, 'nothing (due to low stamina)')
end
table.insert(lootMessage, ".")
con.player:sendTextMessage(MESSAGE_EVENT_ADVANCE, table.concat(lootMessage))
else
insertRewardItems(con.guid, timestamp, playerLoot)
end
endglobalBosses[bossId] = nil
end
return true
endfunction onThink(creature, interval)
local bossId = creature:getId()
local info = globalBosses[bossId]
-- Reset all players' status
for _, player in pairs(info) do
player.active = true
end
-- Set all players in boss' target list as active in the fight
local targets = creature:getTargetList()
for _, target in ipairs(targets) do
if target:isPlayer() then
local stats = getPlayerStats(bossId, target:getGuid(), true)
stats.playerId = target:getId() -- Update player id
stats.active = true
end
end
endfunction onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
if not next(globalBosses) then
return primaryDamage, primaryType, secondaryDamage, secondaryType
endif not creature or not attacker then
return primaryDamage, primaryType, secondaryDamage, secondaryType
endlocal stats = creature:inBossFight()
if not stats then
return primaryDamage, primaryType, secondaryDamage, secondaryType
endlocal creatureId, attackerId = creature:getId(), attacker:getId()
stats.playerId = creatureId -- Update player id-- Account for healing of others active in the boss fight
if primaryType == COMBAT_HEALING and attacker:isPlayer() and attackerId ~= creatureId then
local healerStats = getPlayerStats(stats.bossId, attacker:getGuid(), true)
healerStats.active = true
healerStats.playerId = attackerId -- Update player id
healerStats.healing = healerStats.healing + primaryDamage
elseif stats.bossId == attackerId then
-- Account for damage taken from the boss
stats.damageIn = stats.damageIn + primaryDamage
end
return primaryDamage, primaryType, secondaryDamage, secondaryType
end -
Vodkard estou com um erro no meu servidor pois o rewardchest só esta abrindo quando eu sumono um monstro
quando ele nasce nolmalmente ele não da loot eo rewardchest não abre .
voce poderia me dar uma ajuda pois já procurei em todos os scripts e nã achei nada
function onCreatureAppear(self, creature)
if self == creature then
if self:getType():isRewardBoss() then
self:setReward(true)
end
end
endlocal function pushSeparated(buffer, sep, ...)
local argv = {...}
local argc = #argv
for k, v in ipairs(argv) do
table.insert(buffer, v)
if k < argc and sep then
table.insert(buffer, sep)
end
end
endlocal function insertItems(buffer, info, parent, items)
local start = info.running
for _, item in ipairs(items) do
if _ ~= 1 or parent > 100 then
table.insert(buffer, ",")
endinfo.running = info.running + 1
table.insert(buffer, "(")
pushSeparated(buffer, ",", info.playerGuid, parent, info.running, item:getId(), item:getSubType(), db.escapeBlob(item:serializeAttributes()))
table.insert(buffer, ")")if item:isContainer() then
local size = item:getSize()
if size > 0 then
local subItems = {}
for i = 1, size do
table.insert(subItems, item:getItem(i - 1))
endinsertItems(buffer, info, info.running, subItems)
end
end
end
return info.running - start
endlocal function insertRewardItems(playerGuid, timestamp, itemList)
db.asyncStoreQuery('SELECT `pid`, `sid` FROM `player_rewards` WHERE player_id = ' .. playerGuid .. ' ORDER BY `sid` ASC;',
function(query)
local lastReward = 0
local lastStoreId
if query then
repeat
local sid = result.getDataInt(query, 'sid')
local pid = result.getDataInt(query, 'pid')if pid < 100 then
lastReward = pid
end
lastStoreId = sid
until not result.next(query)
endlocal buffer = {'INSERT INTO `player_rewards` (`player_id`, `pid`, `sid`, `itemtype`, `count`, `attributes`) VALUES'}
--reward bag
local info = {
playerGuid = playerGuid,
running = lastStoreId or 100
}local bag = Game.createItem(ITEM_REWARD_CONTAINER)
bag:setAttribute(ITEM_ATTRIBUTE_DATE, timestamp)if itemList then
for _, item in ipairs(itemList) do
bag:addItem(item[1], item[2])
end
endlocal total = insertItems(buffer, info, lastReward + 1, {bag})
table.insert(buffer, ";")if total ~= 0 then
db.query(table.concat(buffer))
end
end
)
endlocal function getPlayerStats(bossId, playerGuid, autocreate)
local ret = globalBosses[bossId][playerGuid]
if not ret and autocreate then
ret = {
bossId = bossId,
damageIn = 0, -- damage taken from the boss
healing = 0, -- healing (other players) done
}
globalBosses[bossId][playerGuid] = ret
return ret
end
return ret
endfunction onDeath(creature, corpse, killer, mostDamageKiller, lastHitUnjustified, mostDamageUnjustified)
local monsterType = creature:getType()
if monsterType:isRewardBoss() then -- Make sure it is a boss
local bossId = creature:getId()
local timestamp = os.time()local totalDamageOut, totalDamageIn, totalHealing = 0.1, 0.1, 0.1 -- avoid dividing by zero
local scores = {}
local info = globalBosses[bossId]
local damageMap = creature:getDamageMap()for guid, stats in pairs(info) do
local player = Player(stats.playerId)
local part = damageMap[stats.playerId]
local damageOut, damageIn, healing = (stats.damageOut or 0) + (part and part.total or 0), stats.damageIn or 0, stats.healing or 0totalDamageOut = totalDamageOut + damageOut
totalDamageIn = totalDamageIn + damageIn
totalHealing = totalHealing + healingtable.insert(scores, {
player = player,
guid = guid,
damageOut = damageOut,
damageIn = damageIn,
healing = healing,
})
endlocal participants = 0
for _, con in ipairs(scores) do
local score = (con.damageOut / totalDamageOut) + (con.damageIn / totalDamageIn) + (con.healing / totalHealing)
con.score = score / 3 -- normalize to 0-1
if score ~= 0 then
participants = participants + 1
end
end
table.sort(scores, function(a, b) return a.score > b.score end)local expectedScore = 1 / participants
for _, con in ipairs(scores) do
local reward, stamina -- ignoring stamina for now because I heard you receive rewards even when it's depleted
if con.player then
reward = con.player:getReward(timestamp, true)
stamina = con.player:getStamina()
else
stamina = con.stamina or 0
endlocal playerLoot
if --[[stamina > 840 and]] con.score ~= 0 then
local lootFactor = 1
lootFactor = lootFactor / participants ^ (1 / 3) -- tone down the loot a notch if there are many participants
lootFactor = lootFactor * (1 + lootFactor) ^ (con.score / expectedScore) -- increase the loot multiplicatively by how many times the player surpassed the expected score
playerLoot = monsterType:getBossReward(lootFactor, _ == 1)if con.player then
for _, p in ipairs(playerLoot) do
reward:addItem(p[1], p[2])
end
end
endif con.player then
local lootMessage = {"The following items are available in your reward chest: "}if --[[stamina > 840]]true then
reward:getContentDescription(lootMessage)
else
table.insert(lootMessage, 'nothing (due to low stamina)')
end
table.insert(lootMessage, ".")
con.player:sendTextMessage(MESSAGE_EVENT_ADVANCE, table.concat(lootMessage))
else
insertRewardItems(con.guid, timestamp, playerLoot)
end
endglobalBosses[bossId] = nil
end
return true
endfunction onThink(creature, interval)
local bossId = creature:getId()
local info = globalBosses[bossId]
-- Reset all players' status
for _, player in pairs(info) do
player.active = true
end
-- Set all players in boss' target list as active in the fight
local targets = creature:getTargetList()
for _, target in ipairs(targets) do
if target:isPlayer() then
local stats = getPlayerStats(bossId, target:getGuid(), true)
stats.playerId = target:getId() -- Update player id
stats.active = true
end
end
endfunction onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
if not next(globalBosses) then
return primaryDamage, primaryType, secondaryDamage, secondaryType
endif not creature or not attacker then
return primaryDamage, primaryType, secondaryDamage, secondaryType
endlocal stats = creature:inBossFight()
if not stats then
return primaryDamage, primaryType, secondaryDamage, secondaryType
endlocal creatureId, attackerId = creature:getId(), attacker:getId()
stats.playerId = creatureId -- Update player id-- Account for healing of others active in the boss fight
if primaryType == COMBAT_HEALING and attacker:isPlayer() and attackerId ~= creatureId then
local healerStats = getPlayerStats(stats.bossId, attacker:getGuid(), true)
healerStats.active = true
healerStats.playerId = attackerId -- Update player id
healerStats.healing = healerStats.healing + primaryDamage
elseif stats.bossId == attackerId then
-- Account for damage taken from the boss
stats.damageIn = stats.damageIn + primaryDamage
end
return primaryDamage, primaryType, secondaryDamage, secondaryType
end