Ir para conteúdo
  • 0

Bug Doors Otserv 9.60


oktober15

Pergunta

Passei meu server pra 9.60, porem bugou as portas, quando tento abri qualquer porta da esse erro.

[0:13:15.158] [Error - Action Interface]

[0:13:15.158] data/actions/scripts/other/doors.lua:onUse

[0:13:15.159] Description:

[0:13:15.159] data/lib/050-function.lua:10: bad argument #1 to 'ipairs' (table e

xpected, got nil)

[0:13:15.160] stack traceback:

[0:13:15.160] [C]: in function 'ipairs'

[0:13:15.161] data/lib/050-function.lua:10: in function 'isInArray'

[0:13:15.161] data/actions/scripts/other/doors.lua:87: in function <data/actio

ns/scripts/other/doors.lua:16>

 

ja troquei lib, ja troquei de scriot doors.lua, nao adianta.. aguem me ajuda?

doors.lua

local function checkStackpos(item, position)

position.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE

local thing = getThingFromPos(position)

 

position.stackpos = STACKPOS_TOP_FIELD

local field = getThingFromPos(position)

 

return (item.uid == thing.uid or thing.itemid < 100 or field.itemid == 0)

end

 

local function doorEnter(cid, item, toPosition)

doTransformItem(item.uid, item.itemid + 1)

doTeleportThing(cid, toPosition)

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

 

if(getItemLevelDoor(item.itemid) > 0) then

if(item.actionid == 189) then

if(not isPremium(cid)) then

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

return true

end

 

doorEnter(cid, item, toPosition)

return true

end

 

local gender = item.actionid - 186

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

if(gender ~= getPlayerSex(cid)) then

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

return true

end

 

doorEnter(cid, item, toPosition)

return true

end

 

local skull = item.actionid - 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

 

doorEnter(cid, item, toPosition)

return true

end

 

local group = item.actionid - 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

 

doorEnter(cid, item, toPosition)

return true

end

 

local vocation = item.actionid - 100

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

local playerVocationInfo = getVocationInfo(getPlayerVocation(cid))

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

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

return true

end

 

doorEnter(cid, item, toPosition)

return true

end

 

if(item.actionid == 190 or (item.actionid ~= 0 and getPlayerLevel(cid) >= (item.actionid - getItemLevelDoor(item.itemid)))) then

doorEnter(cid, item, toPosition)

else

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

end

 

return true

end

 

if(isInArray(specialDoors, item.itemid)) then

if(item.actionid == 100 or (item.actionid ~= 0 and getPlayerStorageValue(cid, item.actionid) > 0)) then

doorEnter(cid, item, toPosition)

else

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

end

 

return true

end

 

if(isInArray(keys, item.itemid)) then

if(itemEx.actionid > 0) then

if(item.actionid == itemEx.actionid and doors[itemEx.itemid] ~= nil) then

doTransformItem(itemEx.uid, doors[itemEx.itemid])

return true

end

 

doPlayerSendCancel(cid, "The key does not match.")

return true

end

 

return false

end

 

if(isInArray(horizontalOpenDoors, item.itemid) and checkStackpos(item, fromPosition)) then

local newPosition = toPosition

newPosition.y = newPosition.y + 1

local doorPosition = fromPosition

doorPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE

local doorCreature = getThingfromPos(doorPosition)

if(doorCreature.itemid ~= 0) then

local pzDoorPosition = getTileInfo(doorPosition).protection

local pzNewPosition = getTileInfo(newPosition).protection

if((pzDoorPosition and not pzNewPosition and doorCreature.uid ~= cid) or

(not pzDoorPosition and pzNewPosition and doorCreature.uid == cid and isPlayerPzLocked(cid))) then

doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)

else

doTeleportThing(doorCreature.uid, newPosition)

if(not isInArray(closingDoors, item.itemid)) then

doTransformItem(item.uid, item.itemid - 1)

end

end

 

return true

end

 

doTransformItem(item.uid, item.itemid - 1)

return true

end

 

if(isInArray(verticalOpenDoors, item.itemid) and checkStackpos(item, fromPosition)) then

local newPosition = toPosition

newPosition.x = newPosition.x + 1

local doorPosition = fromPosition

doorPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE

local doorCreature = getThingfromPos(doorPosition)

if(doorCreature.itemid ~= 0) then

if(getTileInfo(doorPosition).protection and not getTileInfo(newPosition).protection and doorCreature.uid ~= cid) then

doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)

else

doTeleportThing(doorCreature.uid, newPosition)

if(not isInArray(closingDoors, item.itemid)) then

doTransformItem(item.uid, item.itemid - 1)

end

end

 

return true

end

 

doTransformItem(item.uid, item.itemid - 1)

return true

end

 

if(doors[item.itemid] ~= nil and checkStackpos(item, fromPosition)) then

if(item.actionid == 0) then

doTransformItem(item.uid, doors[item.itemid])

else

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

end

 

return true

end

 

return false

end

 

closingdoors.lua

function onStepOut(cid, item, position, lastPosition)

if(getTileInfo(position).creatures > 0) then

return true

end

 

local newPosition = {x = position.x + 1, y = position.y, z = position.z}

local query = doTileQueryAdd(cid, newPosition)

if(query == RETURNVALUE_NOTENOUGHROOM) then

newPosition.x = newPosition.x - 1

newPosition.y = newPosition.y + 1

query = doTileQueryAdd(cid, newPosition) -- repeat until found

end

 

if(query == RETURNVALUE_NOERROR and query == RETURNVALUE_NOTENOUGHROOM) then

doRelocate(position, newPosition)

end

 

position.stackpos = -1

local i, tileItem, tileCount = 1, {uid = 1}, getTileThingByPos(position)

while(tileItem.uid ~= 0 and i < tileCount) do

position.stackpos = i

tileItem = getTileThingByPos(position)

if(tileItem.uid ~= 0 and tileItem.uid ~= item.uid and isMovable(tileItem.uid)) then

doRemoveItem(tileItem.uid)

else

i = i + 1

end

end

 

local itemInfo = getItemInfo(item.itemid)

doTransformItem(item.uid, itemInfo.transformUseTo)

return true

end

 

 

walkback.lua

local SPECIAL_QUESTS = {2001}

 

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

local container = isContainer(item.uid)

if((container and not isInArray(SPECIAL_QUESTS, item.actionid) and

item.uid > 65535) or (fromPosition.x ~= 0 and getTileInfo(fromPosition).floorChange[9])

or (not container and getTileInfo(position).creatures <= 1)) then

return true

end

 

if(lastPosition.x == 0) then -- player just logged in

lastPosition = getTownTemplePosition(getPlayerTown(cid))

doSendMagicEffect(lastPosition, CONST_ME_TELEPORT)

end

 

doTeleportThing(cid, lastPosition, true)

return true

end

 

 

vlw e rep++

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

estou com 1 problema parecido, minhas portas abrem arrastao o char pra dentro delas, normal, mais quando o player sai, elas deveriam fechar, e alem de ficarem abertas, da este mesmo erro que voce citou acima... se alguem puder ajudar por favor, ajude aqui :S

Link para o comentário
Compartilhar em outros sites

  • 0

tente subistitui sua tag no actions por está

 

<!-- Doors -->

 

<action itemid="1209-1214;1219-1262;1539-1542;3535-3552;4913-4918;5082-5085;5098-5145;5278-5295;5515-5518;5732-5737;5745-5749;6192-6209;6249-6266;6795-6802;6891-6908;7033-7050;7054-7057;8541-8558;9165-9184;9267-9284;10268-10285;10468-10486;10775-10777;10780-10786;10789-10792;12092-12105;12188-12190;12193-12199;12202-12205;12692;12695;12701;12703;13020-13023;13236-13237" event="script" value="other/doors.lua"/>

 

e depois vai em data/actions/scripts/other/doors e subistitua ou criei um arquivo com o nome doors e cole isto

 

 

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

continuou o problema cara, da erro nas movements, nao nas actions :S

 

ajuda ai pls

 

 

olha o erro das actions

 

 

[20:26:25.723] [Error - MoveEvents Interface]
[20:26:25.726] data/movements/scripts/closingdoor.lua:onStepOut
[20:26:25.729] Description:
[20:26:25.730] data/lib/050-function.lua:10: bad argument #1 to 'ipairs' (table
expected, got nil)
[20:26:25.734] stack traceback:
[20:26:25.735]  [C]: in function 'ipairs'
[20:26:25.737]  data/lib/050-function.lua:10: in function 'isInArray'
[20:26:25.740]  data/movements/scripts/closingdoor.lua:7: in function <data/move
ments/scripts/closingdoor.lua:1>

Link para o comentário
Compartilhar em outros sites

  • 0

esse erro é na lib não na actions tente substituir sua lib 050-function por esta

 

function doPlayerSetSkill(cid, skill, amount)

local pid = getPlayerGUID(cid)

doRemoveCreature(cid,true)

db.executeQuery("UPDATE `player_skills` SET `value` = ".. amount .." WHERE `player_id` = ".. pid .. " and `skillid` = ".. skill ..";")

return TRUE

end

 

function doPlayerSetMagic(cid, amount)

local pid = getPlayerGUID(cid)

doRemoveCreature(cid,true)

db.executeQuery("UPDATE `players` SET `maglevel` = " .. amount .. " WHERE `id` = "..pid)

return TRUE

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 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 isPremium(cid)

return (isPlayer(cid) and (getPlayerPremiumDays(cid) > 0 or getBooleanFromString(getConfigInfo('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 isNumber(str)

return tonumber(str) ~= nil

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) ~= 0

end

 

function getTibiaTime()

local minutes = getWorldTime()

local hours = 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 * 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 getHouseTilesCount(houseId)

return 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 tmp = getPlayersOnline()

local players = {}

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

if(not isPlayer(cid)) then

return false

end

 

return 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 = 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)

end

 

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

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

 

local players = getPlayersOnline()

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

 

local players = getPlayersOnline()

for _, pid in ipairs(players) 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 = attributes or false

 

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

if(attributes) then

if(item.actionid > 0) then

doItemSetAttribute(ret, "aid", item.actionid)

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 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.clientCharges or false

end

 

function isItemDoor(itemid)

local item = getItemInfo(itemid)

return item and item.type == 5 or false

end

 

function 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

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 getPlayerMarriage(player)

local rows = db.getResult("SELECT `marriage` FROM `players` WHERE `id` = " .. player .. ";")

local marry = rows:getDataInt("marriage")

if marry ~= 0 then

return marry

else

return FALSE

end

end

 

function addMarryStatus(player,partner)

db.executeQuery("UPDATE `players` SET `marrystatus` = " .. partner .. " WHERE `id` = " .. player .. ";")

return TRUE

end

 

function doCancelMarryStatus(player)

db.executeQuery("UPDATE `players` SET `marrystatus` = 0 WHERE `id` = " .. player .. ";")

return TRUE

end

 

function getMarryStatus(player)

local stat = db.getResult("SELECT `id` FROM `players` WHERE `marrystatus` = " .. player .. ";")

if(stat:getID() == -1) then

return FALSE

else

local info = stat:getDataInt("id")

return info

end

end

 

function getOwnMarryStatus(player)

local stat = db.getResult("SELECT `marrystatus` FROM `players` WHERE `id` = " .. player .. ";")

if(stat:getID() == -1) then

return FALSE

else

local info = stat:getDataInt("marrystatus")

return info

end

end

 

function isOnline(player)

local rows = db.getResult("SELECT `online` FROM `players` WHERE `id` = " .. player .. ";")

local on = rows:getDataInt("online")

if on ~= 0 then

return TRUE

else

return FALSE

end

end

 

e tente substituir tbm sua movements de closing dor por esta

 

function onStepOut(cid, item, position, fromPosition)

if(getTileInfo(position).creatures > 0) then

return true

end

 

local newPosition = {x = position.x, y = position.y, z = position.z}

if(isInArray(verticalOpenDoors, item.itemid)) then

newPosition.x = newPosition.x + 1

else

newPosition.y = newPosition.y + 1

end

 

doRelocate(position, newPosition)

position.stackpos = -1

 

local i, tileItem, tileCount = 1, {uid = 1}, getTileThingByPos(position)

while(tileItem.uid ~= 0 and i < tileCount) do

position.stackpos = i

tileItem = getTileThingByPos(position)

if(tileItem.uid ~= 0 and tileItem.uid ~= item.uid and isMovable(tileItem.uid)) then

doRemoveItem(tileItem.uid)

else

i = i + 1

end

end

 

doTransformItem(item.uid, item.itemid - 1)

return true

end

 

Link para o comentário
Compartilhar em outros sites

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