Ir para conteúdo
  • 0

(Duvida)Portas 9.60


nonhock

Pergunta

Pessoal eu Tinha um Otserv 8.60,eu Passei ele para 9.60,nao pelas sources,mais substituindo muitos arquivos da Lib,global events,creaturescripts e outros...

 

Porém estou com 1 Problema,as Portas nao Abrem ao Serem Clicadas,sejam elas de houses,ou de treinadores ou de qualquer outro Tipo.

 

Meu others/doors.lua é:

 

local function doorEnter(cid, uid, id, position)

doTransformItem(uid, id)

doTeleportThing(cid, position)

return true

end

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

if(fromPosition.x ~= CONTAINER_POSITION and isPlayerPzLocked(cid) and getTileInfo(fromPosition).protection) then

doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)

return true

end

 

local locked = DOORS[item.itemid]

if(locked) then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.")

return true

end

 

local door = getItemInfo(item.itemid)

if(door.levelDoor > 0) then

if(item.aid == 189) then

if(not isPremium(cid)) then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")

return true

end

 

return doorEnter(cid, item.uid, door.transformUseTo, toPosition)

end

 

local gender = item.aid - 186

if(isInArray({PLAYERSEX_FEMALE, PLAYERSEX_MALE}, gender)) then

if(gender ~= getPlayerSex(cid)) then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")

return true

end

 

return doorEnter(cid, item.uid, door.transformUseTo, toPosition)

end

 

local skull = item.aid - 180

if(skull >= SKULL_NONE and skull <= SKULL_BLACK) then

if(skull ~= getCreatureSkullType(cid)) then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")

return true

end

 

return doorEnter(cid, item.uid, door.transformUseTo, toPosition)

end

 

local group = item.aid - 150

if(group >= 0 and group < 30) then

if(group > getPlayerGroupId(cid)) then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")

return true

end

 

return doorEnter(cid, item.uid, door.transformUseTo, toPosition)

end

 

local vocation = item.aid - 100

if(vocation >= 0 and vocation < 50) then

local vocationEx = getVocationInfo(getPlayerVocation(cid))

if(vocationEx.id ~= vocation and vocationEx.fromVocation ~= vocation) then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")

return true

end

 

return doorEnter(cid, item.uid, door.transformUseTo, toPosition)

end

 

if(item.aid == 190 or (item.aid ~= 0 and getPlayerLevel(cid) >= (item.aid - door.levelDoor))) then

return doorEnter(cid, item.uid, door.transformUseTo, toPosition)

end

 

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")

return true

end

 

if(door.specialDoor) then

if(item.aid == 100 or (item.aid ~= 0 and getCreatureStorage(cid, item.aid) > 0)) then

return doorEnter(cid, item.uid, door.transformUseTo, toPosition)

end

 

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The door seems to be sealed against unwanted intruders.")

return true

end

 

toPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE

local fields, thing = getTileItemsByType(fromPosition, ITEM_TYPE_MAGICFIELD), getThingFromPosition(toPosition)

if(item.uid ~= thing.uid and thing.itemid >= 100 and table.maxn(fields) ~= 0) then

return true

end

 

local doorCreature = getThingFromPosition(toPosition)

if(doorCreature.itemid ~= 0) then

toPosition.x = toPosition.x + 1

local query = doTileQueryAdd(doorCreature.uid, toPosition, 20) -- allow to stack outside doors, but not on teleports or floor changing tiles

if(query == RETURNVALUE_NOTPOSSIBLE) then

toPosition.x = toPosition.x - 1

toPosition.y = toPosition.y + 1

query = doTileQueryAdd(doorCreature.uid, toPosition, 20) -- repeat until found

end

 

if(query ~= RETURNVALUE_NOERROR) then

doPlayerSendDefaultCancel(cid, query)

return true

end

 

doTeleportThing(doorCreature.uid, toPosition)

if(not door.closingDoor) then

doTransformItem(item.uid, door.transformUseTo)

end

 

return true

end

 

return false

end

 

 

 

Meu lib,0-50 Functions é:

 

 

 

 

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

end

 

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

doPlayerAddOutfit(cid, femaleOutfits, 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[2] .. ' ' .. getItemNameById(items[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[1]) >= items[2] then

count = count + 1 end end end

if count == table.maxn(items) then

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

else return false end

return true end

 

 

Por Favor ME AJUDEM

DOU REP+

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

testa esse

local function doorEnter(cid, uid, id, position)
doTransformItem(uid, id)
doTeleportThing(cid, position)
return true
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
if(fromPosition.x ~= CONTAINER_POSITION and isPlayerPzLocked(cid) and getTileInfo(fromPosition).protection) then
 doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
 return true
end
local locked = DOORS[item.itemid]
if(locked) then
 doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.")
 return true
end
local door = getItemInfo(item.itemid)
if(door.levelDoor > 0) then
 if(item.aid == 189) then
  if(not isPremium(cid)) then
   doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
   return true
  end
  return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
 end
 local gender = item.aid - 186
 if(isInArray({PLAYERSEX_FEMALE,  PLAYERSEX_MALE}, gender)) then
  if(gender ~= getPlayerSex(cid)) then
   doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
   return true
  end
  return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
 end
 local skull = item.aid - 180
 if(skull >= SKULL_NONE and skull <= SKULL_BLACK) then
  if(skull ~= getCreatureSkullType(cid)) then
   doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
   return true
  end
  return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
 end
 local group = item.aid - 150
 if(group >= 0 and group < 30) then
  if(group > getPlayerGroupId(cid)) then
   doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
   return true
  end
  return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
 end
 local vocation = item.aid - 100
 if(vocation >= 0 and vocation < 50) then
  local vocationEx = getVocationInfo(getPlayerVocation(cid))
  if(vocationEx.id ~= vocation and vocationEx.fromVocation ~= vocation) then
   doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
   return true
  end
  return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
 end
 if(item.aid == 190 or (item.aid ~= 0 and getPlayerLevel(cid) >= (item.aid - door.levelDoor))) then
  return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
 end
 doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
 return true
end
if(door.specialDoor) then
 if(item.aid == 100 or (item.aid ~= 0 and getCreatureStorage(cid, item.aid) > 0)) then
  return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
 end
 doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The door seems to be sealed against unwanted intruders.")
 return true
end
toPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
local fields, thing = getTileItemsByType(fromPosition, ITEM_TYPE_MAGICFIELD), getThingFromPosition(toPosition)
if(item.uid ~= thing.uid and thing.itemid >= 100 and table.maxn(fields) ~= 0) then
 return true
end
local doorCreature = getThingFromPosition(toPosition)
if(doorCreature.itemid ~= 0) then
 toPosition.x = toPosition.x + 1
 local query = doTileQueryAdd(doorCreature.uid, toPosition, 20) -- allow to stack outside doors, but not on teleports or floor changing tiles
 if(query == RETURNVALUE_NOTPOSSIBLE) then
  toPosition.x = toPosition.x - 1
  toPosition.y = toPosition.y + 1
  query = doTileQueryAdd(doorCreature.uid, toPosition, 20) -- repeat until found
 end
 if(query ~= RETURNVALUE_NOERROR) then
  doPlayerSendDefaultCancel(cid, query)
  return true
 end
 doTeleportThing(doorCreature.uid, toPosition)
 if(not door.closingDoor) then
  doTransformItem(item.uid, door.transformUseTo)
 end
 return true
end
return false
end

Link para o comentário
Compartilhar em outros sites

  • 0

nao funcionou lek =(

pior que aqui no console do servidor nao da nenhum problema.

Eu simplemesme clico na door e ela nao abre =(

 

me ajudem por favor !!!!!

 

se vcs acharem que devo substituir alguns arquivos,só colocar quais arquivos e o que substituir

 

DOU REP !!!

DOU REP !!!

DOU REP !!!

DOU REP !!!

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

  • 0

veja assim

 

local function doorEnter(cid, uid, id, position)
doTransformItem(uid, id)
doTeleportThing(cid, position)
return true
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
if(fromPosition.x ~= CONTAINER_POSITION and isPlayerPzLocked(cid) and getTileInfo(fromPosition).protection) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
return true
end
local locked = DOORS[item.itemid]
if(locked) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.")
return true
end
local door = getItemInfo(item.itemid)
if(door.levelDoor > 0) then
if(item.aid == 189) then
if(not isPremium(cid)) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
return true
end
return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
end
local gender = item.aid - 186
if(isInArray({PLAYERSEX_FEMALE, PLAYERSEX_MALE}, gender)) then
if(gender ~= getPlayerSex(cid)) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
return true
end
return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
end
local skull = item.aid - 180
if(skull >= SKULL_NONE and skull <= SKULL_BLACK) then
if(skull ~= getCreatureSkullType(cid)) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
return true
end
return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
end
local group = item.aid - 150
if(group >= 0 and group < 30) then
if(group > getPlayerGroupId(cid)) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
return true
end
return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
end
local vocation = item.aid - 100
if(vocation >= 0 and vocation < 50) then
local vocationEx = getVocationInfo(getPlayerVocation(cid))
if(vocationEx.id ~= vocation and vocationEx.fromVocation ~= vocation) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
return true
end
return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
end
if(item.aid == 190 or (item.aid ~= 0 and getPlayerLevel(cid) >= (item.aid - door.levelDoor))) then
return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
return true
end
if(door.specialDoor) then
if(item.aid == 100 or (item.aid ~= 0 and getCreatureStorage(cid, item.aid) > 0)) then
return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The door seems to be sealed against unwanted intruders.")
return true
end
toPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
local fields, thing = getTileItemsByType(fromPosition, ITEM_TYPE_MAGICFIELD), getThingFromPosition(toPosition)
if(item.uid ~= thing.uid and thing.itemid >= 100 and table.maxn(fields) ~= 0) then
return true
end
local doorCreature = getThingFromPosition(toPosition)
if(doorCreature.itemid ~= 0) then
toPosition.x = toPosition.x + 1
local query = doTileQueryAdd(doorCreature.uid, toPosition, 20) -- allow to stack outside doors, but not on teleports or floor changing tiles
if(query == RETURNVALUE_NOTPOSSIBLE) then
toPosition.x = toPosition.x - 1
toPosition.y = toPosition.y + 1
query = doTileQueryAdd(doorCreature.uid, toPosition, 20) -- repeat until found
end
if(query ~= RETURNVALUE_NOERROR) then
doPlayerSendDefaultCancel(cid, query)
return true
end
doTeleportThing(doorCreature.uid, toPosition)
if(not door.closingDoor) then
doTransformItem(item.uid, door.transformUseTo)
end
return true
end
return false
end

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, addon)
end
for i = 0, table.maxn(femaleOutfits) do
doPlayerAddOutfit(cid, femaleOutfits, 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[2] .. ' ' .. getItemNameById(items[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[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 comentário
Compartilhar em outros sites

  • 0

nao foi =(

será que é no items.xml

 

pega o seu id 1220

o meu ta assim

 

<item id="1220" article="an" name="open door">

<attribute key="type" value="door" />

</item>

 

é assim mesmo ?

Link para o comentário
Compartilhar em outros sites

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