Ir para conteúdo
  • Cadastre-se

Erro NPCs que usa loot.lua e default.lua.


Posts Recomendados

Galera estou tendo um log de erros relacionados a 2 scripts de npc,ja tentei pegar de outro servidor,mas parece que tem algo relacionado a minha lib,nessa parte ja nao intendo aguem pode me dar uma ajuda?Nessa parte de npc sou totalmente leigo. =/

Agradeço desde já. 

 

Log:

[spoiler][12:34:42.468] [Error - NpcScript Interface]
[12:34:42.468] data/npc/scripts/loot.lua
[12:34:42.468] Description:
[12:34:42.468] data/lib/050-function.lua:222: attempt to index a boolean value
[12:34:42.468] [Warning - NpcEvents::NpcEvents] Cannot load script: data/npc/scr
ipts/loot.lua

[Warning] NpcSystem:
Parameter(s) missing for item:
orcish axe

500
[Warning] NpcSystem:
Parameter(s) missing for item:
orcish axe

500

[12:34:43.593] [Error - NpcScript Interface]
[12:34:43.593] data/npc/scripts/default.lua
[12:34:43.593] Description:
[12:34:43.593] data/lib/050-function.lua:222: attempt to index a boolean value
[12:34:43.593] [Warning - NpcEvents::NpcEvents] Cannot load script: data/npc/scr
ipts/default.lua

[Warning] NpcSystem:
Parameter(s) missing for item:
halberd 2381
400

[Warning] NpcSystem:
Parameter(s) missing for item:
50



[12:34:44.171] [Error - NpcScript Interface]
[12:34:44.171] data/npc/scripts/default.lua
[12:34:44.171] Description:
[12:34:44.171] data/lib/050-function.lua:222: attempt to index a boolean value
[12:34:44.171] [Warning - NpcEvents::NpcEvents] Cannot load script: data/npc/scr
ipts/default.lua

[Warning] NpcSystem:
Parameter(s) missing for item:
halberd 2381
400

[Warning] NpcSystem:
Parameter(s) missing for item:
50



[12:34:44.296] [Error - NpcScript Interface]
[12:34:44.296] data/npc/scripts/loot.lua
[12:34:44.296] Description:
[12:34:44.296] data/lib/050-function.lua:222: attempt to index a boolean value
[12:34:44.296] [Warning - NpcEvents::NpcEvents] Cannot load script: data/npc/scr
ipts/loot.lua
[/spoiler]

Arquivo loot.lua:

[spoiler]local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end

-- Don't forget npcHandler = npcHandler in the parameters. It is required for all StdModule functions!
keywordHandler:addKeyword({'helmets'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I buy royal (40k), warrior (6k), crusader (9k), crown (5k), devil (4k), chain (35gp) and iron helmets (30gp), also mystic turbans (500gp).'})
keywordHandler:addKeyword({'boots'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I buy golden boots (100k), steel boots (40k) and boots of haste (40k).'})
keywordHandler:addKeyword({'armors'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I buy golden (30k), crown (20k), knight (5k), lady (7,5k), plate (400gp), brass (200gp) and chain armors (100gp), also mpa (100k), dsm (60k) and blue robes (15k).'})
keywordHandler:addKeyword({'legs'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I buy golden (80k), crown (15k), knight (6k), plate (500gp) and brass legs (100gp).'})
keywordHandler:addKeyword({'shields'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I buy blessed (150k), great (100k), demon (40k), vampire (25k), medusa (8k), amazon (4k), crown (5k), tower (4k), dragon (3k), guardian (2k), beholder (1k), and dwarven shields (100gp), also mms (80k).'})
keywordHandler:addKeyword({'swords'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I buy giant (10k), bright (6k), fire (3k) serpent (1.5k), spike (800gp) and two handed swords (400gp), also ice rapiers (4k), magic longswords (150k), magic swords (90k), warlord swords (100k) broad swords (70gp), short swords (30gp), sabres (25gp) and swords (25gp).'})
keywordHandler:addKeyword({'axes'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I buy fire (10k), guardian halberds (7,5k) knight (2k), double (200gp) and battle axes (100gp), also dragon lances (10k), stonecutters axes (90k), halberds (200gp) and hatchets (20gp).'})
keywordHandler:addKeyword({'clubs'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I buy thunder hammers (90k), war (6k), dragon (2k) and battle hammers (60gp), also skull staffs (10k) and clerical maces (200gp).'})

npcHandler:addModule(FocusModule:new())[/spoiler]

default.lua:


[spoiler]
local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end npcHandler:addModule(FocusModule:new())

Lib /050-function.lua

 

Segue toda o arquivo da lib,mas a linha 222 acusada no log é essa: 

return getItemDescriptionsById(itemid).name

[spoiler]function doPlayerGiveItem(cid, itemid, amount, subType)
local item = 0
if(isItemStackable(itemid)) then
item = doCreateItemEx(itemid, amount)
if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
return false
end
else
for i = 1, amount do
item = doCreateItemEx(itemid, subType)
if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
return false
end
end
end


return true
end


function doPlayerGiveItemContainer(cid, containerid, itemid, amount, subType)
for i = 1, amount do
local container = doCreateItemEx(containerid, 1)
for x = 1, getContainerCapById(containerid) do
doAddContainerItem(container, itemid, subType)
end


if(doPlayerAddItemEx(cid, container, true) ~= RETURNVALUE_NOERROR) then
return false
end
end


return true
end


function doPlayerTakeItem(cid, itemid, amount)
return getPlayerItemCount(cid, itemid) >= amount and doPlayerRemoveItem(cid, itemid, amount)
end


function doPlayerBuyItem(cid, itemid, count, cost, charges)
return doPlayerRemoveMoney(cid, cost) and doPlayerGiveItem(cid, itemid, count, charges)
end


function doPlayerBuyItemContainer(cid, containerid, itemid, count, cost, charges)
return doPlayerRemoveMoney(cid, cost) and doPlayerGiveItemContainer(cid, containerid, itemid, count, charges)
end


function doPlayerSellItem(cid, itemid, count, cost)
if(not doPlayerTakeItem(cid, itemid, count)) then
return false
end


if(not doPlayerAddMoney(cid, cost)) then
error('[doPlayerSellItem] Could not add money to: ' .. getPlayerName(cid) .. ' (' .. cost .. 'gp).')
end


return true
end


function doPlayerWithdrawMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end


local balance = getPlayerBalance(cid)
if(amount > balance or not doPlayerAddMoney(cid, amount)) then
return false
end


doPlayerSetBalance(cid, balance - amount)
return true
end


function doPlayerDepositMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end


if(not doPlayerRemoveMoney(cid, amount)) then
return false
end


doPlayerSetBalance(cid, getPlayerBalance(cid) + amount)
return true
end


function isPremium(cid)
return (isPlayer(cid) and (getPlayerPremiumDays(cid) > 0 or getBooleanFromString(getConfigInfo('freePremium'))))
end


function getMonthDayEnding(day)
if(day == "01" or day == "21" or day == "31") then
return "st"
elseif(day == "02" or day == "22") then
return "nd"
elseif(day == "03" or day == "23") then
return "rd"
end


return "th"
end


function getMonthString(m)
return os.date("%B", os.time{year = 1970, month = m, day = 1})
end


function getArticle(str)
return str:find("[AaEeIiOoUuYy]") == 1 and "an" or "a"
end


function isNumber(str)
return tonumber(str) ~= nil
end


function doPlayerAddAddons(cid, addon)
for i = 0, table.maxn(maleOutfits) do
doPlayerAddOutfit(cid, maleOutfits[i], addon)
end


for i = 0, table.maxn(femaleOutfits) do
doPlayerAddOutfit(cid, femaleOutfits[i], addon)
end
end


function doPlayerWithdrawAllMoney(cid)
return doPlayerWithdrawMoney(cid, getPlayerBalance(cid))
end


function doPlayerDepositAllMoney(cid)
return doPlayerDepositMoney(cid, getPlayerMoney(cid))
end


function doPlayerTransferAllMoneyTo(cid, target)
return doPlayerTransferMoneyTo(cid, target, getPlayerBalance(cid))
end


function playerExists(name)
return getPlayerGUIDByName(name) ~= 0
end


function getTibiaTime()
local minutes = getWorldTime()
local hours = 0
while (minutes > 60) do
hours = hours + 1
minutes = minutes - 60
end


return {hours = hours, minutes = minutes}
end


function doWriteLogFile(file, text)
local f = io.open(file, "a+")
if(not f) then
return false
end


f:write("[" .. os.date("%d/%m/%Y %H:%M:%S") .. "] " .. text .. "\n")
f:close()
return true
end


function getExperienceForLevel(lv)
lv = lv - 1
return ((50 * lv * lv * lv) - (150 * lv * lv) + (400 * lv)) / 3
end


function doMutePlayer(cid, time)
local condition = createConditionObject(CONDITION_MUTED)
setConditionParam(condition, CONDITION_PARAM_TICKS, time * 1000)
return doAddCondition(cid, condition)
end


function getPlayerGroupName(cid)
return getGroupInfo(getPlayerGroupId(cid)).name
end


function getPlayerVocationName(cid)
return getVocationInfo(getPlayerVocation(cid)).name
end


function getPromotedVocation(vid)
return getVocationInfo(vid).promotedVocation
end


function doPlayerRemovePremiumDays(cid, days)
return doPlayerAddPremiumDays(cid, -days)
end


function getPlayerMasterPos(cid)
return getTownTemplePosition(getPlayerTown(cid))
end


function getHouseOwner(houseId)
return getHouseInfo(houseId).owner
end


function getHouseName(houseId)
return getHouseInfo(houseId).name
end


function getHouseEntry(houseId)
return getHouseInfo(houseId).entry
end


function getHouseRent(houseId)
return getHouseInfo(houseId).rent
end


function getHousePrice(houseId)
return getHouseInfo(houseId).price
end


function getHouseTown(houseId)
return getHouseInfo(houseId).town
end


function getHouseTilesCount(houseId)
return getHouseInfo(houseId).tiles
end


function getItemNameById(itemid)
return getItemDescriptionsById(itemid).name
end


function getItemPluralNameById(itemid)
return getItemDescriptionsById(itemid).plural
end


function getItemArticleById(itemid)
return getItemDescriptionsById(itemid).article
end


function getItemName(uid)
return getItemDescriptions(uid).name
end


function getItemPluralName(uid)
return getItemDescriptions(uid).plural
end


function getItemArticle(uid)
return getItemDescriptions(uid).article
end


function getItemText(uid)
return getItemDescriptions(uid).text
end


function getItemSpecialDescription(uid)
return getItemDescriptions(uid).special
end


function getItemWriter(uid)
return getItemDescriptions(uid).writer
end


function getItemDate(uid)
return getItemDescriptions(uid).date
end


function getTilePzInfo(pos)
return getTileInfo(pos).protection
end


function getTileZoneInfo(pos)
local tmp = getTileInfo(pos)
if(tmp.pvp) then
return 2
end


if(tmp.nopvp) then
return 1
end


return 0
end


function doShutdown()
return doSetGameState(GAMESTATE_SHUTDOWN)
end


function doSummonCreature(name, pos, displayError)
local displayError, cid = displayError or true, doCreateMonster(name, pos, displayError)
if(not cid) then
cid = doCreateNpc(name, pos, displayError)
end


return cid
end


function getOnlinePlayers()
local tmp = getPlayersOnline()
local players = {}
for i, cid in ipairs(tmp) do
table.insert(players, getCreatureName(cid))
end


return players
end


function getPlayerByName(name)
local cid = getCreatureByName(name)
return isPlayer(cid) and cid or nil
end


function isPlayer(cid)
return isCreature(cid) and cid >= AUTOID_PLAYERS and cid < AUTOID_MONSTERS
end


function isPlayerGhost(cid)
if(not isPlayer(cid)) then
return false
end


return getCreatureCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) or getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBESEEN)
end


function isMonster(cid)
return isCreature(cid) and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS
end


function isNpc(cid)
return isCreature(cid) and cid >= AUTOID_NPCS
end


function doPlayerSetExperienceRate(cid, value)
return doPlayerSetRate(cid, SKILL__LEVEL, value)
end


function doPlayerSetMagicRate(cid, value)
return doPlayerSetRate(cid, SKILL__MAGLEVEL, value)
end


function doPlayerAddLevel(cid, amount, round)
local experience, level = 0, getPlayerLevel(cid)
if(amount > 0) then
experience = getExperienceForLevel(level + amount) - (round and getPlayerExperience(cid) or getExperienceForLevel(level))
else
experience = -((round and getPlayerExperience(cid) or getExperienceForLevel(level)) - getExperienceForLevel(level + amount))
end


return doPlayerAddExperience(cid, experience)
end


function doPlayerAddMagLevel(cid, amount)
for i = 1, amount do
doPlayerAddSpentMana(cid, (getPlayerRequiredMana(cid, getPlayerMagLevel(cid, true) + 1) - getPlayerSpentMana(cid)) / getConfigInfo('rateMagic'))
end
return true
end  


function doPlayerAddSkill(cid, skill, amount, round)
if(skill == SKILL__LEVEL) then
return doPlayerAddLevel(cid, amount, round)
elseif(skill == SKILL__MAGLEVEL) then
return doPlayerAddMagLevel(cid, amount)
end


return doPlayerAddSkillTry(cid, skill, (getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill)) / getConfigInfo('rateSkill'))
end


function getPartyLeader(cid)
local party = getPartyMembers(cid)
if(type(party) ~= 'table') then
return 0
end


return party[1]
end


function isInParty(cid)
return type(getPartyMembers(cid)) == 'table'
end


function isPrivateChannel(channelId)
return channelId >= CHANNEL_PRIVATE
end


function doPlayerResetIdleTime(cid)
return doPlayerSetIdleTime(cid, 0)
end


function doBroadcastMessage(text, class)
local class = class or MESSAGE_STATUS_WARNING
if(type(class) == 'string') then
local className = MESSAGE_TYPES[class]
if(className == nil) then
return false
end


class = className
elseif(class < MESSAGE_FIRST or class > MESSAGE_LAST) then
return false
end


local players = getPlayersOnline()
for _, pid in ipairs(players) do
doPlayerSendTextMessage(pid, class, text)
end


print("> Broadcasted message: \"" .. text .. "\".")
return true
end


function doPlayerBroadcastMessage(cid, text, class, checkFlag, ghost)
local checkFlag, ghost, class = checkFlag or true, ghost or false, class or TALKTYPE_BROADCAST
if(checkFlag and not getPlayerFlagValue(cid, PLAYERFLAG_CANBROADCAST)) then
return false
end


if(type(class) == 'string') then
local className = TALKTYPE_TYPES[class]
if(className == nil) then
return false
end


class = className
elseif(class < TALKTYPE_FIRST or class > TALKTYPE_LAST) then
return false
end


local players = getPlayersOnline()
for _, pid in ipairs(players) do
doCreatureSay(cid, text, class, ghost, pid)
end


print("> " .. getCreatureName(cid) .. " broadcasted message: \"" .. text .. "\".")
return true
end


function getBooleanFromString(input)
local tmp = type(input)
if(tmp == 'boolean') then
return input
end


if(tmp == 'number') then
return input > 0
end


local str = string.lower(tostring(input))
return (str == "yes" or str == "true" or (tonumber(str) ~= nil and tonumber(str) > 0))
end


function doCopyItem(item, attributes)
local attributes = attributes or false


local ret = doCreateItemEx(item.itemid, item.type)
if(attributes) then
if(item.actionid > 0) then
doItemSetAttribute(ret, "aid", item.actionid)
end
end


if(isContainer(item.uid)) then
for i = (getContainerSize(item.uid) - 1), 0, -1 do
local tmp = getContainerItem(item.uid, i)
if(tmp.itemid > 0) then
doAddContainerItemEx(ret, doCopyItem(tmp, true).uid)
end
end
end


return getThing(ret)
end


function doRemoveThing(uid)
if(isCreature(uid)) then
return doRemoveCreature(uid)
end


return doRemoveItem(uid)
end


function setAttackFormula(combat, type, minl, maxl, minm, maxm, min, max)
local min, max = min or 0, max or 0
return setCombatFormula(combat, type, -1, 0, -1, 0, minl, maxl, minm, maxm, min, max)
end


function setHealingFormula(combat, type, minl, maxl, minm, maxm, min, max)
local min, max = min or 0, max or 0
return setCombatFormula(combat, type, 1, 0, 1, 0, minl, maxl, minm, maxm, min, max)
end


function doChangeTypeItem(uid, subtype)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end


local subtype = subtype or 1
return doTransformItem(thing.uid, thing.itemid, subtype)
end


function doSetItemText(uid, text, writer, date)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end


doItemSetAttribute(uid, "text", text)
if(writer ~= nil) then
doItemSetAttribute(uid, "writer", tostring(writer))
if(date ~= nil) then
doItemSetAttribute(uid, "date", tonumber(date))
end
end


return true
end


function getFluidSourceType(itemid)
local item = getItemInfo(itemid)
return item and item.fluidSource or false
end


function getDepotId(uid)
return getItemAttribute(uid, "depotid") or false
end


function getItemDescriptions(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end


local item = getItemInfo(thing.itemid)
return {
name = getItemAttribute(uid, "name") or item.name,
plural = getItemAttribute(uid, "pluralname") or item.plural,
article = getItemAttribute(uid, "article") or item.article,
special = getItemAttribute(uid, "description") or "",
text = getItemAttribute(uid, "text") or "",
writer = getItemAttribute(uid, "writer") or "",
date = getItemAttribute(uid, "date") or 0
}
end


function getItemWeightById(itemid, count, precision)
local item, count, precision = getItemInfo(itemid), count or 1, precision or false
if(not item) then
return false
end


if(count > 100) then
-- print a warning, as its impossible to have more than 100 stackable items without "cheating" the count
print('[Warning] getItemWeightById', 'Calculating weight for more than 100 items!')
end


local weight = item.weight * count
--[[if(precision) then
return weight
end


local t = string.explode(tostring(weight), ".")
if(table.maxn(t) == 2) then
return tonumber(t[1] .. "." .. string.sub(t[2], 1, 2))
end]]--


return weight
end


function getItemWeaponType(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end


return getItemInfo(thing.itemid).weaponType
end


function getItemRWInfo(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end


local item, flags = getItemInfo(thing.itemid), 0
if(item.readable) then
flags = 1
end


if(item.writable) then
flags = flags + 2
end


return flags
end


function getItemLevelDoor(itemid)
local item = getItemInfo(itemid)
return item and item.levelDoor or false
end


function isItemStackable(itemid)
local item = getItemInfo(itemid)
return item and item.stackable or false
end


function isItemRune(itemid)
local item = getItemInfo(itemid)
return item and item.clientCharges or false
end


function isItemDoor(itemid)
local item = getItemInfo(itemid)
return item and item.type == 5 or false
end


function isItemContainer(itemid)
local item = getItemInfo(itemid)
return item and item.group == 2 or false
end


function isItemFluidContainer(itemid)
local item = getItemInfo(itemid)
return item and item.group == 12 or false
end


function isItemMovable(itemid)
local item = getItemInfo(itemid)
return item and item.movable or false
end


function isCorpse(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end


local item = getItemInfo(thing.itemid)
return item and item.corpseType ~= 0 or false
end


function getContainerCapById(itemid)
local item = getItemInfo(itemid)
if(not item or item.group ~= 2) then
return false
end


return item.maxItems
end


function getMonsterAttackSpells(name)
local monster = getMonsterInfo(name)
return monster and monster.attacks or false
end


function getMonsterHealingSpells(name)
local monster = getMonsterInfo(name)
return monster and monster.defenses or false
end


function getMonsterLootList(name)
local monster = getMonsterInfo(name)
return monster and monster.loot or false
end


function getMonsterSummonList(name)
local monster = getMonsterInfo(name)
return monster and monster.summons or false
end


 function getPlayerMarriage(player)
local rows = db.getResult("SELECT `marriage` FROM `players` WHERE `id` = " .. player .. ";")
local marry = rows:getDataInt("marriage")
if marry ~= 0 then
return marry
else
return FALSE
end
end


function addMarryStatus(player,partner)
db.query("UPDATE `players` SET `marrystatus` = " .. partner .. " WHERE `id` = " .. player .. ";")
return TRUE
end


function doCancelMarryStatus(player)
db.query("UPDATE `players` SET `marrystatus` = 0 WHERE `id` = " .. player .. ";")
return TRUE
end


function getMarryStatus(player)
local stat = db.getResult("SELECT `id` FROM `players` WHERE `marrystatus` = " .. player .. ";")
if(stat:getID() == -1) then
return FALSE
else
local info = stat:getDataInt("id")
return info
end
end


events = {}


function getOwnMarryStatus(player)
local stat = db.getResult("SELECT `marrystatus` FROM `players` WHERE `id` = " .. player .. ";")
if(stat:getID() == -1) then
return FALSE
else
local info = stat:getDataInt("marrystatus")
return info
end
end


function isOnline(player)
local rows = db.getResult("SELECT `online` FROM `players` WHERE `id` = " .. player .. ";")
local on = rows:getDataInt("online")
if on ~= 0 then
return TRUE
else
return FALSE
end
end[/spoiler]
Editado por Lyon (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo