Ir para conteúdo
  • 0

Ajuda Com Erro Look.lua


96736649

Pergunta

ERRO:

 

[21/06/2012 15:23:23] [Error - CreatureScript Interface]

[21/06/2012 15:23:23] data/creaturescripts/scripts/look.lua:onLook

[21/06/2012 15:23:23] Description:

[21/06/2012 15:23:23] data/lib/050-function.lua:107: attempt to index local 'str' (a nil value)

[21/06/2012 15:23:23] stack traceback:

[21/06/2012 15:23:23] data/lib/050-function.lua:107: in function 'getArticle'

[21/06/2012 15:23:23] data/creaturescripts/scripts/look.lua:16: in function <data/creaturescripts/scripts/look.lua:1>

 

SCRIPT:

 

function onLook(cid, thing, position, lookDistance)
local str = ""if not isCreature(thing.uid) then
 local iname = getItemInfo(thing.itemid)  if isPokeball(thing.itemid) then
  local owner = getItemAttribute(thing.uid, "firstpoke")   local pokename = getItemAttribute(thing.uid, "poke")
  local item = getItemInfo(thing.itemid)
  str = "You see "..item.article.." "..item.name..".\n"
  str = str.."It contains "..getArticle(pokename).." "..pokename.." [level "..getItemAttribute(thing.uid, "level").."].\n"
  if owner and owner ~= getCreatureName(cid) then
   str = str.."It belongs to "..owner..".\nIt is a unique item."
   doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str)
  return false
  end   local boost = getItemAttribute(thing.uid, "boost") or 0
  local boostshow = ""
  if boost > 0 then
   str = str.."Boost level: +"..boost..".\n"
  end   if getItemAttribute(thing.uid, "nick") then
   str = str.."It's nickname is: "..getItemAttribute(thing.uid, "nick")..".\n"
  end

  if getItemAttribute(thing.uid, "gender") == SEX_MALE then
   str = str.."It is male."
  elseif getItemAttribute(thing.uid, "gender") == SEX_FEMALE then
   str = str.."It is female."
  else
   str = str.."It is genderless."
  end

  str = str.."\n--- Status ---"
  str = str.."\nOffense: "..math.floor(getItemAttribute(thing.uid, "offense")).." Defense: "..math.floor(getItemAttribute(thing.uid, "defense")).."\n"
  str = str.."Agility: "..math.floor(getItemAttribute(thing.uid, "speed")).." Sp. Attack: "..math.floor(getItemAttribute(thing.uid, "specialattack")).."\n"
  str = str.."Vitality: "..math.floor(getItemAttribute(thing.uid, "vitality"))..""
 doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str)  return false
 elseif string.find(iname.name, "fainted") or string.find(iname.name, "defeated") then   str = "You see a "..string.lower(iname.name).." ["..getItemAttribute(thing.uid, "level").."].\n"
  if getItemAttribute(thing.uid, "gender") == SEX_MALE then
   str = str.."It is male."
  elseif getItemAttribute(thing.uid, "gender") == SEX_FEMALE then
   str = str.."It is female."
  else
   str = str.."It is genderless."
  end
  doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str)  return false
 else  return true
 end
endlocal npcname = getCreatureName(thing.uid)
local l = string.len(npcname)
 if not isPlayer(thing.uid) and not isMonster(thing.uid) then
  --string.sub(npcname, l - 1, l) == "  " then
  local article = getPlayerStorageValue(thing.uid, 9891) == 1 and "He is" or "She is"
  local nname = string.sub(npcname, 1, l - 2)
  if nname == getCreatureName(cid) then
   nname = "yourself"
   article = "You are"
  end
  str = "You see "..nname..". "..article.." a pokemon trainer."
  doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str)
 return false
 end
if not isMonster(thing.uid) then
return true
endif getCreatureName(thing.uid) == "Evolution" then return false end
if not isSummon(thing.uid) then
 local str = "You see a wild "..string.lower(getCreatureName(thing.uid)).." [level "..getPokemonLevel(thing.uid).."].\n"
 if getPokemonGender(thing.uid)  == SEX_MALE then
  str = str.."It is male."
 elseif getPokemonGender(thing.uid)  == SEX_FEMALE then
  str = str.."It is female."
 else
  str = str.."It is genderless."
 end
 doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str)
return false
elseif isSummon(thing.uid) and not isPlayer(thing.uid) then  local boostlevel = getItemAttribute(getPlayerSlotItem(getCreatureMaster(thing.uid), 8).uid, "boost") or 0
 local boostshow = " + "..boostlevel.."]"
 if showBoostSeparated then
  boostshow = "] [+"..boostlevel.."]"
 end  local levelinfo = "["..getPokemonLevel(thing.uid)..""..boostshow..""
 if getCreatureMaster(thing.uid) == cid then
  local myball = getPlayerSlotItem(cid, 8).uid
  local nexp = getItemAttribute(myball, "nextlevelexp")   local string = "You see your "..string.lower(getCreatureName(thing.uid)).." "..levelinfo.."."
  string = string.."\nHit points: "..getCreatureHealth(thing.uid).."/"..getCreatureMaxHealth(thing.uid).."."
  string = string.."\n"..getPokemonHappinessDescription(thing.uid)
   if getItemAttribute(myball, "level") <= 99 then
 string = string.."\nExperience needed to level up: "..nexp.."."
   end
  doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, string)
 else
  doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You see a "..string.lower(getCreatureName(thing.uid)).." "..levelinfo..".\nIt belongs to "..getCreatureName(getCreatureMaster(thing.uid))..".")
 end

return false
end
return true
end

 

FUNÇÃO EM LIB:

 

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
endfunction 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
endreturn true
end
function doPlayerTakeItem(cid, itemid, amount)
return getPlayerItemCount(cid, itemid) >= amount and doPlayerRemoveItem(cid, itemid, amount)
endfunction 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)
endfunction 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).')
endreturn true
end
function doPlayerWithdrawMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
 return false
endlocal balance = getPlayerBalance(cid)
if(amount > balance or not doPlayerAddMoney(cid, amount)) then
 return false
end
doPlayerSetBalance(cid, balance - amount)
return true
endfunction doPlayerDepositMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
 return false
end
if(not doPlayerRemoveMoney(cid, amount)) then
 return false
enddoPlayerSetBalance(cid, getPlayerBalance(cid) + amount)
return true
end
function isPremium(cid)
return (isPlayer(cid) and (getPlayerPremiumDays(cid) > 0 or getBooleanFromString(getConfigInfo('freePremium'))))
endfunction 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"
endfunction 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"
endfunction isNumber(str)
return tonumber(str) ~= nil
end
function doPlayerAddAddons(cid, addon)
for i = 0, table.maxn(maleOutfits) do
 doPlayerAddOutfit(cid, maleOutfits[i], addon)
endfor i = 0, table.maxn(femaleOutfits) do
 doPlayerAddOutfit(cid, femaleOutfits[i], addon)
end
end
function doPlayerWithdrawAllMoney(cid)
return doPlayerWithdrawMoney(cid, getPlayerBalance(cid))
endfunction doPlayerDepositAllMoney(cid)
return doPlayerDepositMoney(cid, getPlayerMoney(cid))
end
function doPlayerTransferAllMoneyTo(cid, target)
return doPlayerTransferMoneyTo(cid, target, getPlayerBalance(cid))
endfunction 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
endreturn {hours = hours, minutes = minutes}
end
function doWriteLogFile(file, text)
local f = io.open(file, "a+")
if(not f) then
 return false
endf: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
endfunction 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
endfunction getPlayerVocationName(cid)
return getVocationInfo(getPlayerVocation(cid)).name
end
function getPromotedVocation(vid)
return getVocationInfo(vid).promotedVocation
endfunction doPlayerRemovePremiumDays(cid, days)
return doPlayerAddPremiumDays(cid, -days)
end
function getPlayerMasterPos(cid)
return getTownTemplePosition(getPlayerTown(cid))
endfunction getHouseOwner(houseId)
return getHouseInfo(houseId).owner
end
function getHouseName(houseId)
return getHouseInfo(houseId).name
endfunction getHouseEntry(houseId)
return getHouseInfo(houseId).entry
end
function getHouseRent(houseId)
return getHouseInfo(houseId).rent
endfunction getHousePrice(houseId)
return getHouseInfo(houseId).price
end
function getHouseTown(houseId)
return getHouseInfo(houseId).town
endfunction getHouseTilesCount(houseId)
return getHouseInfo(houseId).tiles
end
function getItemNameById(itemid)
return getItemDescriptionsById(itemid).name
endfunction getItemPluralNameById(itemid)
return getItemDescriptionsById(itemid).plural
end
function getItemArticleById(itemid)
return getItemDescriptionsById(itemid).article
endfunction getItemName(uid)
return getItemDescriptions(uid).name
end
function getItemPluralName(uid)
return getItemDescriptions(uid).plural
endfunction getItemArticle(uid)
return getItemDescriptions(uid).article
end
function getItemText(uid)
return getItemDescriptions(uid).text
endfunction getItemSpecialDescription(uid)
return getItemDescriptions(uid).special
end
function getItemWriter(uid)
return getItemDescriptions(uid).writer
endfunction getItemDate(uid)
return getItemDescriptions(uid).date
end
function getTilePzInfo(pos)
return getTileInfo(pos).protection
endfunction getTileZoneInfo(pos)
local tmp = getTileInfo(pos)
if(tmp.pvp) then
 return 2
end
if(tmp.nopvp) then
 return 1
endreturn 0
end
function doShutdown()
return doSetGameState(GAMESTATE_SHUTDOWN)
endfunction 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
endfunction getOnlinePlayers()
local tmp = getPlayersOnline()
local players = {}
for i, cid in ipairs(tmp) do
 table.insert(players, getCreatureName(cid))
end
return players
endfunction 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
endfunction isPlayerGhost(cid)
if(not isPlayer(cid)) then
 return false
end
return getCreatureCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) or getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBESEEN)
endfunction isMonster(cid)
return isCreature(cid) and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS
end
function isNpc(cid)
return isCreature(cid) and cid >= AUTOID_NPCS
endfunction doPlayerSetExperienceRate(cid, value)
return doPlayerSetRate(cid, SKILL__LEVEL, value)
end
function doPlayerSetMagicRate(cid, value)
return doPlayerSetRate(cid, SKILL__MAGLEVEL, value)
endfunction 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)
endfunction 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)
endreturn 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
endreturn party[1]
end
function isInParty(cid)
return type(getPartyMembers(cid)) == 'table'
endfunction isPrivateChannel(channelId)
return channelId >= CHANNEL_PRIVATE
end
function doPlayerResetIdleTime(cid)
return doPlayerSetIdleTime(cid, 0)
endfunction 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
endlocal players = getPlayersOnline()
for _, pid in ipairs(players) do
 doPlayerSendTextMessage(pid, class, text)
end
print("> Broadcasted message: \"" .. text .. "\".")
return true
endfunction 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)
endprint("> " .. getCreatureName(cid) .. " broadcasted message: \"" .. text .. "\".")
return true
end
function getBooleanFromString(input)
local tmp = type(input)
if(tmp == 'boolean') then
 return input
endif(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))
endfunction 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
endif(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)
endfunction doRemoveThing(uid)
if(isCreature(uid)) then
 return doRemoveCreature(uid)
end
return doRemoveItem(uid)
endfunction 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)
endfunction 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)
endfunction 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
endreturn true
end
function getFluidSourceType(itemid)
local item = getItemInfo(itemid)
return item and item.fluidSource or false
endfunction getDepotId(uid)
return getItemAttribute(uid, "depotid") or false
end
function getItemDescriptions(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
 return false
endlocal 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
endif(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
endlocal t = string.explode(tostring(weight), ".")
if(table.maxn(t) == 2) then
 return tonumber(t[1] .. "." .. string.sub(t[2], 1, 2))
end]]--
return weight
endfunction getItemWeaponType(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
 return false
end
return getItemInfo(thing.itemid).weaponType
endfunction 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
endif(item.writable) then
 flags = flags + 2
end
return flags
endfunction 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
endfunction 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
endfunction 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
endfunction 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
endlocal 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
endreturn item.maxItems
end
function getMonsterAttackSpells(name)
local monster = getMonsterInfo(name)
return monster and monster.attacks or false
endfunction 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
endfunction getMonsterSummonList(name)
local monster = getMonsterInfo(name)
return monster and monster.summons or false
end

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

1►Bug que dexei auhasuhas' você ainda nem viu os outros :D

Edit: Leonardo Vieira aki aquele que você robou o serve

Edit 2: Você é Esperto Mudo o IP do serve, más Me Diga Como Você pos Os Pokemons Tão Rapido ? REPORTADO POR ROUBO, Entao´Tá Se Esse Serve é o Seu, O Distro Não Vai Buga Quando Eu Entra E Fizsr Uma Coisinha :D

Editado por Overllord
Link para o comentário
Compartilhar em outros sites

  • 0

Viixxx.... ladrão??? puts..

 

Tem que apanha só de TAPA nas oreia fio!!!

 

Tenho pavor de lek traira...

 

TAPA NAS OREIA DO MLK TRAIRA

sangue nos zóí

Editado por gustavo010
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...