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+