Ir para conteúdo
  • Cadastre-se

[Resolvido] Erro NPC de montaria


Posts Recomendados

Erro:

[21:45:23.343] [Error - LuaInterface::loadFile] data/npc/scripts/Chondur.lua:25: '=' expected near 'npcHandler'

[21:45:23.343] [Warning - NpcEvents::NpcEvents] Cannot load script: data/npc/scripts/Chondur.lua

[21:45:23.343] data/npc/scripts/Chondur.lua:25: '=' expected near 'npcHandler'

Script:

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

function santaNPC(cid, message, keywords, parameters, node)

if(not npcHandler:isFocused(cid)) then

return false

end

if (parameters.present == true) then

if(doPlayerRemoveItem(cid,13301,30) and doPlayerRemoveItem(cid,13299,50) and doPlayerRemoveItem(cid,13300,100) == true) then

doPlayerAddMount(cid,11)

setPlayerStorageValue(cid,1010101,1)

npcHandler:say('Voce trocou seus items por uma montaria do stampor.',cid)

elseif getPlayerStorageValue(cid,1010101) > 0 then

npcHandler:say('Voce já tem essa montaria.',cid)

else

npcHandler:say('Voce não tem os itens nesesários.',cid)

endx

npcHandler:resetNpc()

return true

end

npcHandler:setMessage(MESSAGE_GREET, "Olá |PLAYERNAME|. posso-lhe oferecer uma montaria do {stampor}.")

local noNode = KeywordNode:new({'no'}, santaNPC, {present = false})

local yesNode = KeywordNode:new({'yes'}, santaNPC, {present = true})

local node = keywordHandler:addKeyword({'stampor'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer essa montaria? , voce precisa me trazer items e items e outros items. aceita?'})

node:addChildKeywordNode(yesNode)

node:addChildKeywordNode(noNode)

npcHandler:addModule(FocusModule:new())

Link para o post
Compartilhar em outros sites

Vá na pasta Lib e troque sua 050-fuction por esta


function isInArray(array, value, caseSensitive)

if (caseSensitive == nil or caseSensitive == false) and type(value) == "string" then

  local lowerValue = value:lower()

  for _, _value in ipairs(array) do

   if type(_value) == "string" and lowerValue == _value:lower() then

    return true

   end

  end

else

  for _, _value in ipairs(array) do

   if (value == _value) then return true end

  end

end

return false

end

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 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 doPlayerAddStamina(cid, minutes)

return doPlayerSetStamina(cid, getPlayerStamina(cid) + minutes)

end

function isPremium(cid)

return (isPlayer(cid) and (getPlayerPremiumDays(cid) > 0 or getBooleanFromString(getConfigValue('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 doNumberFormat(i)

local str, found = string.gsub(i, "(%d)(%d%d%d)$", "%1,%2", 1), 0

repeat

  str, found = string.gsub(str, "(%d)(%d%d%d),", "%1,%2,", 1)

until found == 0

return str

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 getTibiaTime(num)

local minutes, hours = getWorldTime(), 0

while (minutes > 60) do

  hours = hours + 1

  minutes = minutes - 60

end

if(num) then

  return {hours = hours, minutes = minutes}

end

return {hours =  hours < 10 and '0' .. hours or '' .. hours, minutes = minutes < 10 and '0' .. minutes or '' .. 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, (time == -1 and time or time * 1000))

return doAddCondition(cid, condition, false)

end

function doSummonCreature(name, pos)

local cid = doCreateMonster(name, pos, false, false)

if(not cid) then

  cid = doCreateNpc(name, pos)

end

return cid

end

function getPlayersOnlineEx()

local players = {}

for i, cid in ipairs(getPlayersOnline()) 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)

return isPlayer(cid) and (getCreatureCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE, CONDITIONID_DEFAULT) or getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBESEEN))

end

function isMonster(cid)

return isCreature(cid) and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS

end

function isNpc(cid)

-- Npc IDs are over int32_t range (which is default for lua_pushnumber),

-- therefore number is always a negative value.

return isCreature(cid) and (cid < 0 or cid >= AUTOID_NPCS)

end

function isUnderWater(cid)

return isInArray(underWater, getTileInfo(getCreaturePosition(cid)).itemid)

end

function doPlayerAddLevel(cid, amount, round)

local experience, level, amount = 0, getPlayerLevel(cid), amount or 1

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)

local amount = amount or 1

for i = 1, amount do

  doPlayerAddSpentMana(cid, getPlayerRequiredMana(cid, getPlayerMagLevel(cid, true) + 1) - getPlayerSpentMana(cid), false)

end

return true

end

function doPlayerAddSkill(cid, skill, amount, round)

local amount = amount or 1

if(skill == SKILL__LEVEL) then

  return doPlayerAddLevel(cid, amount, round)

elseif(skill == SKILL__MAGLEVEL) then

  return doPlayerAddMagLevel(cid, amount)

end

for i = 1, amount do

  doPlayerAddSkillTry(cid, skill, getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill), false)

end

return true

end

function isPrivateChannel(channelId)

return channelId >= CHANNEL_PRIVATE

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

for _, pid in ipairs(getPlayersOnline()) 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

for _, pid in ipairs(getPlayersOnline()) do

  doCreatureSay(cid, text, class, ghost, pid)

end

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

return true

end

function doCopyItem(item, attributes)

local attributes = ((type(attributes) == 'table') and attributes or { "aid" })

local ret = doCreateItemEx(item.itemid, item.type)

for _, key in ipairs(attributes) do

  local value = getItemAttribute(item.uid, key)

  if(value ~= nil) then

   doItemSetAttribute(ret, key, value)

  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 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 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

return precission and weight or math.round(weight, 2)

end

function choose(...)

local arg = {...}

return arg[math.random(1, table.maxn(arg))]

end

function doPlayerAddExpEx(cid, amount)

if(not doPlayerAddExp(cid, amount)) then

  return false

end

local position = getThingPosition(cid)

doPlayerSendTextMessage(cid, MESSAGE_EXPERIENCE, "You gained " .. amount .. " experience.", amount, COLOR_WHITE, position)

local spectators, name = getSpectators(position, 7, 7), getCreatureName(cid)

for _, pid in ipairs(spectators) do

  if(isPlayer(pid) and cid ~= pid) then

   doPlayerSendTextMessage(pid, MESSAGE_EXPERIENCE_OTHERS, name .. " gained " .. amount .. " experience.", amount, COLOR_WHITE, position)

  end

end

return true

end

function getItemTopParent(uid)

local parent = getItemParent(uid)

if(not parent or parent.uid == 0) then

  return nil

end

while(true) do

  local tmp = getItemParent(parent.uid)

  if(tmp and tmp.uid ~= 0) then

   parent = tmp

  else

   break

  end

end

return parent

end

function getItemHolder(uid)

local parent = getItemParent(uid)

if(not parent or parent.uid == 0) then

  return nil

end

local holder = nil

while(true) do

  local tmp = getItemParent(parent.uid)

  if(tmp and tmp.uid ~= 0) then

   if(tmp.itemid == 1) then -- a creature

    holder = tmp

    break

   end

   parent = tmp

  else

   break

  end

end

return holder

end

function valid(f)

return function(p, ...)

  if(isCreature(p)) then

   return f(p, ...)

  end

end

end

function getItemsFromList(items) -- by vodka

local str = ''

if table.maxn(items) > 0 then

for i = 1, table.maxn(items) do

str = str .. items[i][2] .. ' ' .. getItemNameById(items[i][1])

if i ~= table.maxn(items) then str = str .. ', ' end end end

return str

end

function doRemoveItemsFromList(cid,items) -- by vodka

local count = 0

if table.maxn(items) > 0 then

for i = 1, table.maxn(items) do

if getPlayerItemCount(cid,items[i][1]) >= items[i][2] then

count = count + 1 end  end  end

if count == table.maxn(items) then

for i = 1, table.maxn(items) do doPlayerRemoveItem(cid,items[i][1],items[i][2]) end

else return false end

return true end

Link para o post
Compartilhar em outros sites



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


function santaNPC(cid, message, keywords, parameters, node)

   if(not npcHandler:isFocused(cid)) then

      return false

   end


   if (parameters.present == true) then

      if(doPlayerRemoveItem(cid,13301,30) and doPlayerRemoveItem(cid,13299,50) and doPlayerRemoveItem(cid,13300,100) == true) then

         doPlayerAddMount(cid,11)

         setPlayerStorageValue(cid,1010101,1)

         npcHandler:say('Voce trocou seus items por uma montaria do stampor.',cid)

      elseif getPlayerStorageValue(cid,1010101) > 0 then

         npcHandler:say('Voce já tem essa montaria.',cid)

      else

         npcHandler:say('Voce não tem os itens nesesários.',cid)

      end


 npcHandler:resetNpc()

end


return true

end


npcHandler:setMessage(MESSAGE_GREET, "Olá |PLAYERNAME|. posso-lhe oferecer uma montaria do {stampor}.")


local noNode = KeywordNode:new({'no'}, santaNPC, {present = false})

local yesNode = KeywordNode:new({'yes'}, santaNPC, {present = true})


local node = keywordHandler:addKeyword({'stampor'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer essa montaria? , voce precisa me trazer items e items e outros items. aceita?'})

node:addChildKeywordNode(yesNode)

node:addChildKeywordNode(noNode)

npcHandler:addModule(FocusModule:new())


Tava faltando um end, mas o erro estava acontecendo pois na linha 24 está escrito:

endx

Lua interpreta isso como a tentativa de definir um valor à variável, porém não há o símbolo =(de atribuição), então dá o seguinte erro:

[21:45:23.343] data/npc/scripts/Chondur.lua:25: '=' expected near 'npcHandler'

-"Supra Omnes Lux Lucis"

- Acima de todos brilha a Luz -

5VGnDyBz.png

Link para o post
Compartilhar em outros sites


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


local items_need = {{13301, 30}, {13299, 50}, {13300, 100}}

function santaNPC(cid, message, keywords, parameters, node)

if(not npcHandler:isFocused(cid)) then

return false

end


if parameters.present then

if getPlayerStorageValue(cid, 10543) > 0 then

npcHandler:resetNpc()

return npcHandler:say('Voce já tem essa montaria.',cid)

end


for _, v in pairs(items_need) do

if getPlayerItemCount(cid, v[1]) < v[2] then

local str = ""

for _, x in pairs(items_need) do

str = str .. ", ".. x[2] .. " ".. getItemNameById(v[1])

end

npcHandler:resetNpc()

return npcHandler:say("Você precisa de".. str .. ".", cid)

end

end


for _, v in pairs(items_need) do

doPlayerRemoveItem(cid, v[1], v[2])

end


doPlayerAddMount(cid, 11)

setPlayerStorageValue(cid, 10543, 1)

npcHandler:say('Voce trocou seus items por uma montaria do stampor.', cid)

npcHandler:resetNpc()

end


return true

end


npcHandler:setMessage(MESSAGE_GREET, "Olá |PLAYERNAME|. posso-lhe oferecer uma montaria do {stampor}.")


local noNode = KeywordNode:new({'no'}, santaNPC, {present = false})

local yesNode = KeywordNode:new({'yes'}, santaNPC, {present = true})


local node = keywordHandler:addKeyword({'stampor'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer essa montaria? , voce precisa me trazer items e items e outros items. aceita?'})

node:addChildKeywordNode(yesNode)

node:addChildKeywordNode(noNode)

npcHandler:addModule(FocusModule:new())


-"Supra Omnes Lux Lucis"

- Acima de todos brilha a Luz -

5VGnDyBz.png

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