Ir para conteúdo
  • 0

Tile pra passar precisa de item x


piratadoidao

Pergunta

Posts Recomendados

  • 0

achu q seria isso..

local item = 1111
function onStepIn(cid, item, position, lastPosition, fromPosition)
  if getPlayerItemCount(cid, item) <= 0 then
  doTeleportThing(cid, fromPosition)
  doPlayerSendTextMessage(cid, 27, "You need atleast one ".. getItemName(item).." to pass!")
  return false
  end
doPlayerRemoveItem(cid, item, 1)
return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

sim movements.. essa eh a tag..

<movevent type="StepIn" actionid="xxxx" event="script" value="yyyyy.lua"/>

em xxxx coloca o actionID do piso

em yyyyy coloca o nome do arquivo

Link para o comentário
Compartilhar em outros sites

  • 0

Tente isso meu amigo...

 

local item = ITEMID

function onStepIn(cid, item, position, lastPosition, fromPosition)

if item.actionid == ACTIONID then

if getPlayerItemCount(cid, item) <= 0 then

doTeleportThing(cid, fromPosition)

doPlayerSendCancel(cid, "You need atleast one ".. getItemName(item).." to pass!")

else

doPlayerRemoveItem(cid, item, 1)

end

end

return true

end

 

ITEMID = id do item que será necessário para passar.

ACTIONID = action usada no piso (isso será necessário para que só este piso carregue o sistema e outros pisos do mesmo id nao.)

 

E no movements.xml coloque isso...

 

<movevent type="StepIn" actionid="ACTIONID" event="script" value="nomedoscript.lua"/>

 

Espero ter ajudado!!!

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

  • 0
local config = {
   itemid = 7154,
   count = 1
}

function onStepIn(cid, item, position, lastPosition, fromPosition)
   local g = getPlayerItemById(cid, true, config.itemid)
   if g.uid > 0 and g.type >= math.max(1, config.count) then
    return true
   else
    doTeleportThing(cid, fromPosition)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need at least ".. config.count .." ".. getItemInfo(config.itemid).name .." to pass.")
    return false
   end
end

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

  • 0

Siim... ja estou desconfiando da LIB mesmo...

andei olhando em outros OTservers até...

Deve ser por isso que o /additem , e essa questao do Tile não estão funcionando...

Bom aqui esta....

 

To precisando muito.. kkk' Ja comprei até agua benta...

 

050 - function

 

 

 

 

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 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 isNumeric(str)

return tonumber(str) ~= nil

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, addon)

end

 

for i = 0, table.maxn(femaleOutfits) do

doPlayerAddOutfit(cid, femaleOutfits, 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) ~= nil

end

 

function getTibiaTime()

local minutes, hours = getWorldTime(), 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 == -1 and time or 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 getHouseDoorsCount(houseId)

return table.maxn(getHouseInfo(houseId).doors)

end

 

function getHouseBedsCount(houseId)

return table.maxn(getHouseInfo(houseId).beds)

end

 

function getHouseTilesCount(houseId)

return table.maxn(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 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) 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, 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)

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

 

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 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 = ((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 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 doItemSetActionId(uid, aid)

return doItemSetAttribute(uid, "aid", aid)

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.type == ITEM_TYPE_RUNE or false

end

 

function isItemDoor(itemid)

local item = getItemInfo(itemid)

return item and item.type == ITEM_TYPE_DOOR or false

end

 

function isItemContainer(itemid)

local item = getItemInfo(itemid)

return item and item.group == ITEM_GROUP_CONTAINER or false

end

 

function isItemFluidContainer(itemid)

local item = getItemInfo(itemid)

return item and item.group == ITEM_GROUP_FLUID 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 choose(...)

local arg = {...}

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

end

 

 

function getCharacterAcess(cid)

local query = db.getResult("SELECT `vipacess` FROM `players` WHERE `id` = "..getPlayerGUID(cid))

if query:getID() ~= -1 then return query:getDataInt("vipacess") end

end

function getCharacterDays(cid)

local acess = math.ceil((getCharacterAcess(cid) - os.time())/(86400))

return acess <= 0 and 0 or acess

end

function HaveCharaterAcess(cid)

return getCharacterDays(cid) > 0 and true or false

end

function setAcessTime(cid, time)

return db.executeQuery("UPDATE `players` SET `vipacess` = "..time.." WHERE `id` = "..getPlayerGUID(cid))

end

function addCharacterAcess(cid, days)

local add = (days <= 0 and 1 or days)*86400

local time = getCharacterDays(cid) == 0 and (os.time() + add) or (getCharacterAcess(cid) + add)

return setAcessTime(cid, time)

end

function doRemoveCharacterAcess(cid, days)

local remove = days*86400

local time = getCharacterAcess(cid) - remove

return setAcessTime(cid, (time <= 0 and 1 or time))

end

function getVipAcessDate(cid)

if HaveCharaterAcess(cid) then return os.date("%d/%m/%y %X", getCharacterAcess(cid)) end

return false

end

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Eu e minha mania de complicar as coisas:

 

local config = {
   itemid = 7154,
   count = 1
}
function onStepIn(cid, item, position, lastPosition, fromPosition)
   if getPlayerItemCount(cid, config.itemid) >= config.count then
    return true
   else
    doTeleportThing(cid, fromPosition)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need at least ".. config.count .." ".. getItemInfo(config.itemid).name .." to pass.")
    return false
   end
end

Link para o comentário
Compartilhar em outros sites

  • 0

[error - LuaInterface::loadfile] ..../..../...camarapiso.lua: 13: '=' expected near '<eof>'

 

Eiss oque esta dando...

Vou ficar um mes inteiro de dando REP+ cara só pela disposição... kkkkk'

 

Ps: se possível, remover o ITEM quando o player passar ;)

Vlws

Link para o comentário
Compartilhar em outros sites

  • 0

local config = {
   itemid = 7154,
   count = 1
}

function onStepIn(cid, item, position, lastPosition, fromPosition)
   if getPlayerItemCount(cid, config.itemid) >= config.count then
       doPlayerRemoveItem(cid, config.itemid, config.count)
       return true
   else
       doTeleportThing(cid, fromPosition)
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need at least ".. config.count .." ".. getItemInfo(config.itemid).name .." to pass.")
       return false
   end
end

 

Agora sobre esse seu erro aí, deve ser do servidor usado, pois aqui no The Forgotten Server 0.3.6pl1 funcionou perfeitamente.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...