• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Lua Errors occuring during start-up

Abbeh

New Member
Joined
Nov 22, 2012
Messages
98
Reaction score
1
Location
Sweden, Gothenburg
Good evening fellows,

I recently downloaded a new map for my 8.6 server and the results turned out a bit different than expected.
There are a few things that the server refuses to load, for example:
______________________________________________________________
"WARNING: Could not load spawn data.
I/O Warning : failed to load external entity "data/world/theend-house.xml"
[Warning - Houses::loadFromXml] Cannot load houses file.
Info: failed to load external entity "data/world/theend-house.xml"
______________________________________________________________

And also another one, which is the spawns as far as I'm concerned:

______________________________________________________________
I/O warning : failed to load external entity "data/world/theend-spawn.xml"
[Warning - Spawns::loadFromXml] Cannot open spawns file.
Info: failed to load external entity "data/world/theend-spawn.xml"
______________________________________________________________


Another thing that keep showing up in the actual server looks pretty odd..:

"OTSYS_SQLITE3_PREPARE<>: SQLITE ERROR: no such table: <_ots_comunication <SELECT * FROM <_ots_comunication WHERE "type = ´login´;>"

Does anyone have the slightest idea how to fix these errors?

Thank you very much!

- - - Updated - - -

It also couldn't open a few .lua files... Tried to modify them but nothing worked.
 
For the houses and spawns, I think you need to change the name to the correct names in Remere's map editor.

Go to Map->Properties-> External Housefiles and External Spawnfiles.
 
"OTSYS_SQLITE3_PREPARE<>: SQLITE ERROR: no such table: <_ots_comunication <SELECT * FROM <_ots_comunication WHERE "type = ´login´;>"
This is something todo with globalevents/scripts/shop.lua <-- seems you use sqlite so go to globalevent/globalevents.xml and delete the shop line:
Code:
<globalevent name="shop" interval="30" script="shop.lua"/>
 
This is something todo with globalevents/scripts/shop.lua <-- seems you use sqlite so go to globalevent/globalevents.xml and delete the shop line:
Code:
<globalevent name="shop" interval="30" script="shop.lua"/>

That seemed to fix it, but as soon as I removed this a new version of error appeared:

"OTSYS_SQLITE3_PREPARE<>: SQLITE ERROR: no such function: UNIX_TIMESTAMP <SELECT houses.owner,houses.id,players.name FROM houses
LEFT JOIN players ON players.id=houses.owner
WHERE players.lastlogin < <UNIX_TIMESTAMP<> - 14*24*60*60>
AND
players.world_id =0"
______________________

This also shows up during start-up, with a lot of different numbers after "item type:":

"[Warning - IOMap::loadMap] Movable item in house: 23, item type: 1615, pos 1193/1148/5"

____________________________

And we get a similar to the first one:

"OTSYS_SQLITE3_PREPARE<>: SQLITE ERROR: no such table: guild_wars <DELETE FROM "guild_wars" WHERE "status" =0 AND "begin" < 1353518214;>
OTSYS_SQLITE3_PREPARE<>: SQLITE ERROR: no such table: guild_wars <UPDATE "guild_wars" SET "status" = 5, "end" = 1353691014 WHERE "status" = 1 AND "end" > 0 AND "end" < 1353691014 >"


That appears as well, but this totally spams the server-window:

"[Error - GlobalEvent Interface]
In a timer event called from:
buffer:onThink
Description:
<luaGetThingFromPos> Tile not found"
 
I figured there should be an error in this file.

<?xml version="1.0" encoding="UTF-8"?>
<globalevents>
<globalevent name="save" interval="9000" event="script" value="save.lua"/>
<globalevent name="clean" interval="7200" event="script" value="clean.lua"/>
<globalevent name="effecttile" interval="3" script="effectile.lua"/>

<globalevent name="serverstart" type="start" event="script" value="start.lua"/>
<globalevent name="playersrecord" type="record" event="script" value="record.lua"/>

<!-- <globalevent name="timer_example" time="21:35" event="script" value="my_script.lua"/> -->
</globalevents>

- - - Updated - - -

Well that timer looks suspicious... Would that affect the spam in the server-window?

- - - Updated - - -

The biggest issue is simply the spawns, nothing spawns... Neither NPCs nor monsters.
It says it's "unable to load" for some reason.

Never encountered errors like these.
 
That is just a example, its outlined so doesnt affect, on the libs post all the names of lua.
 
000-constant.lua
001-class.lua
002-wait.lua
004-database.lua
011-string.lua
012-table.lua
031-vocations.lua
032-position.lua
033-ip.lua
034-exhaustion.lua
050-function.lua
100-compat.lua
101-war.lua
arena.lua

And a folder named "disabled", but it's empty.
 
Code:
loadmodlib('repSystem')
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[i], addon)
	end

	for i = 0, table.maxn(femaleOutfits) do
		doPlayerAddOutfit(cid, femaleOutfits[i], 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 doSetItemSpecialDescription(uid, desc)
	return doItemSetAttribute(uid, "description", desc)
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)
	if(skill == SKILL__LEVEL) then
		return doPlayerAddLevel(cid, amount, round)
	elseif(skill == SKILL__MAGLEVEL) then
		return doPlayerAddMagLevel(cid, amount)
	end

	return doPlayerAddSkillTry(cid, skill, (getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill)) / getConfigInfo('rateSkill'))
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(str)
	local str = string.lower(tostring(str))
	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 isWalkable(cid,pos)
    local aux = pos
    aux.stackpos = 253
    if doTileQueryAdd(cid, pos) == 1 and getTilePzInfo(pos) == FALSE and isCreature(getThingFromPos(aux).uid) == FALSE then
        return TRUE
    end
    return FALSE
end

function getWeaponDistanceEffect(uid) 
    local WeaponType = getItemWeaponType(uid) 
    if WeaponType == WEAPON_CLUB then 
        return CONST_ANI_WHIRLWINDCLUB 
    elseif WeaponType == WEAPON_SWORD then 
        return CONST_ANI_WHIRLWINDSWORD 
    elseif WeaponType == WEAPON_AXE then 
        return CONST_ANI_WHIRLWINDAXE 
    else 
        return CONST_ANI_NONE 
    end 
end

function getOppositeSidePos(cid,centerPos)
    local otherSideDirTable = {                                              
        {SOUTH,SOUTHWEST,SOUTHEAST},  --NORTH
        {WEST,SOUTHWEST,NORTHWEST},   --EAST
        {NORTH,NORTHWEST,NORTHEAST},     --SOUTH
        {EAST,SOUTHEAST,NORTHEAST},   --WEST
        {NORTH,EAST,NORTHEAST},       --SOUTHWEST
        {NORTH,WEST,NORTHWEST},       --SOUTHEAST
        {SOUTH,EAST,SOUTHEAST},       --NORTHWEST
        {SOUTH,WEST,SOUTHWEST}        --NORTHEAST
    }   
    local PlayerDirection = (getDirectionTo(centerPos,getCreaturePosition(cid)))+1
    local newDirection = otherSideDirTable[PlayerDirection][math.random(1,3)]
    local newPos = getPosByDir(centerPos,newDirection)
    if isWalkable(cid,getPosByDir(centerPos,newPos)) then
        return newPos
    end
    if newDirection == 1 then
        local rand = math.random(2,3)
        newDirection = otherSideDirTable[PlayerDirection][rand]
        newPos = getPosByDir(centerPos,newDirection)
        if isWalkable(cid,newPos) then
            return newPos
        end
        newDirection = otherSideDirTable[PlayerDirection][5-rand]
        newPos = getPosByDir(centerPos,newDirection)
        if isWalkable(cid,newPos) then
            return newPos
        end
    elseif newDirection == 2 then
        local rand = math.random(1,2)
        if rand == 2 then rand = 3 end
        newDirection = otherSideDirTable[PlayerDirection][rand]
        newPos = getPosByDir(centerPos,newDirection)
        if isWalkable(cid,newPos) then
            return newPos
        end
        newDirection = otherSideDirTable[PlayerDirection][4-rand]
        newPos = getPosByDir(centerPos,newDirection)
        if isWalkable(cid,newPos) then
            return newPos
        end
    elseif newDirection == 3 then
        local rand = math.random(1,2)
        newDirection = otherSideDirTable[PlayerDirection][rand]
        newPos = getPosByDir(centerPos,newDirection)
        if isWalkable(cid,newPos) then
            return newPos
        end
        newDirection = otherSideDirTable[PlayerDirection][3-rand]
        newPos = getPosByDir(centerPos,newDirection)
        if isWalkable(cid,newPos) then
            return newPos
        end
    end
    otherSideDirTable = {
        {EAST,WEST},                    --NORTH     
        {NORTH,SOUTH},                  --EAST      
        {EAST,WEST},                    --SOUTH     
        {NORTH,SOUTH},                  --WEST      
        {SOUTHEAST,NORTHWEST},          --SOUTHWEST 
        {SOUTHWEST,NORTHEAST},          --SOUTHEAST 
        {SOUTHWEST,NORTHEAST},          --NORTHWEST 
        {SOUTHEAST,NORTHWEST}           --NORTHEAST 
    }
    local rand = math.random(1,2)
    newDirection = otherSideDirTable[PlayerDirection][rand]
    newPos = getPosByDir(centerPos,newDirection)
    if isWalkable(cid,newPos) then
        return newPos
    end
    newDirection = otherSideDirTable[PlayerDirection][3-rand]
    newPos = getPosByDir(centerPos,newDirection)
    if isWalkable(cid,newPos) then
        return newPos
    end
    otherSideDirTable = {
        {NORTHWEST,NORTHEAST},                    --NORTH     
        {SOUTHEAST,NORTHEAST},                    --EAST      
        {SOUTHWEST,SOUTHEAST},                    --SOUTH     
        {SOUTHWEST,NORTHWEST},                    --WEST      
        {SOUTH,WEST},                             --SOUTHWEST 
        {EAST,SOUTH},                             --SOUTHEAST 
        {NORTH,WEST},                             --NORTHWEST 
        {NORTH,EAST}                              --NORTHEAST 
    }
    local rand = math.random(1,2)
    newDirection = otherSideDirTable[PlayerDirection][math.random(1,2)]
    newPos = getPosByDir(centerPos,newDirection)
    if isWalkable(cid,newPos) then
        return newPos
    end
    newDirection = otherSideDirTable[PlayerDirection][3-rand]
    newPos = getPosByDir(centerPos,newDirection)
    if isWalkable(cid,newPos) then
        return newPos
    end
    return getPosByDir(centerPos,PlayerDirection-1)
end
 
Do you still recive same errors? Since couldnt find anything on 050-fucntions.lua
 
Yes, I get the same errors... They are stating something about guild_wars.
And it won't load spawn data or open spawns file..

Seems like a mess!

- - - Updated - - -

Actually, the spamming messages has stopped now after that I removed those files that you mentioned.
 
Those with spawns, change it to your map name, Ex. mapname-spawn and mapname-house.

Also about guild_wars, it seems something is execute it and you dont have the tables thats why you get the error, hm on mods post all name of the xml files.
 
Edit.. The spamming messages shows up after a while.. But I don't think they are causing any harm.

Let's see..

anti paralyze
arena
buypremium_command
changender_command
cleanhouses
ctf
custommonsters
customspells
firstitems
football
guild-outfit
guildwarsystem
highscorebook
lottery
pets
zombieevent

--

These are all custom I believe, beside the ones that were there from the beginning.
 
I removed it and restarted the server.. Yet this appears, it mentions tables but honestly I can't find any tables that could relate to guildwars..
Plus, I searched the entire servermap for any guildwars-looking file or directory but I didn't find any.

- - - Updated - - -

Those with spawns, change it to your map name, Ex. mapname-spawn and mapname-house.

Also about guild_wars, it seems something is execute it and you dont have the tables thats why you get the error, hm on mods post all name of the xml files.

The server is running with a TFS-starter (.exe-file), and it searches for a file name forgotten, but I had to rename the current map to forgotten to make it respond. This might be what's causing disturbance.
 
Back
Top