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

Bomberman, Help ^^

Mestor

Active Member
Joined
Feb 1, 2009
Messages
515
Reaction score
35
Location
Sweden
When I am in the Bomb room and get like a crystal whole server stop and this error spamming in console

PHP:
[14/08/2010 10:36:19] [Error - TalkAction Interface] 
[14/08/2010 10:36:19] In a timer event called from: 
[14/08/2010 10:36:19] data/talkactions/scripts/bomb.lua:onSay
[14/08/2010 10:36:19] Description: 
[14/08/2010 10:36:19] (luaDoTileQueryAdd) Thing not found



Can someone help me with this? REP ++ :thumbup:
 
Bomb.lua
PHP:
function getPlayersInRange(position, radiusx, radiusy)
    local creaturesList = {}
    for x = -radiusx, radiusx do
        for y = -radiusy, radiusy do
            if not (x == 0 and y == 0) then
                local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z})
                if creature.type == 1 then
                    table.insert(creaturesList, creature.uid)
                end
            end
        end
    end

    local creature = getTopCreature(position)
    if creature.type == 1 then
        if not(table.find(creaturesList, creature.uid)) then
            table.insert(creaturesList, creature.uid)
        end
    end
    return creaturesList
end

function isPositionInArray(haystack, needle)
    for i = 1, #haystack do
        if haystack[i].x == needle.x and haystack[i].y == needle.y and haystack[i].z == needle.z then
            return true
        end
    end
    return false
end

local t = {
    from = {x=32214, y=32175, z=8},
    to = {x=32228, y=32185, z=8},
    storage = {
        placed = 10001,
        max = 10002,
        radius = 10003
    },
    delay = 3000,
    bombID = 10570,
    effect = CONST_ME_FIREAREA,
    blockID = 9468,
    text = "BOOM!",
    temple = {x=32222, y=32221, z=8},
    exceptions = {
        {x=32214, y=32175, z=8},
        {x=32214, y=32176, z=8},
        {x=32215, y=32175, z=8},
        
        {x=32228, y=32185, z=8},
        {x=32227, y=32185, z=8},
        {x=32228, y=32184, z=8},
        
        {x=32214, y=32185, z=8},
        {x=32214, y=32184, z=8},
        {x=32215, y=32185, z=8},
        
        {x=33228, y=32175, z=8},
        {x=33227, y=32175, z=8},
        {x=33228, y=32176, z=8}
    }
}
function reset()
    local dummy = doCreateItem(10570, 1, {x=33228, y=32175, z=8    })
    for x = t.from.x, t.to.x do
        for y = t.from.y, t.to.y do
            local pos = {x=x,y=y,z=t.from.z}
            local i1, i2, i3  = getTileItemById(pos, 8304).uid, getTileItemById(pos, 8306).uid, getTileItemById(pos, 8310).uid
            if i1 > 0 then
                doRemoveItem(i1)
            end
            if i2 > 0 then
                doRemoveItem(i2)
            end
            if i3 > 0 then
                doRemoveItem(i3)
            end
            if queryTileAddThing(dummy, pos, 4) == RETURNVALUE_NOERROR and not isPositionInArray(t.exceptions, pos) then
                doCreateItem(t.blockID, 1, pos)
            end
        end
    end
    doRemoveItem(dummy)
end

local function boom(pos, cid)
    local v = getTileItemById(pos, t.bombID).uid
    if isPlayer(cid) and isInRange(getThingPos(cid), t.from, t.to) then
        setPlayerStorageValue(cid, t.storage.placed, getPlayerStorageValue(cid, t.storage.placed) - 1)
        doCreatureSay(cid, t.text, TALKTYPE_ORANGE_2, false, nil, pos)
        doSendMagicEffect(pos, t.effect)
        local c = getTopCreature(pos).uid
        if isPlayer(c) and isInRange(getThingPos(c), t.from, t.to) then
            doSendMagicEffect(pos, CONST_ME_GIFT_WRAPS)
            doTeleportThing(c, t.temple)
            doSendMagicEffect(t.temple, CONST_ME_MORTAREA)
            local n1, n2 = getPlayerName(c), getPlayerName(cid)
            doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex(c) == 0 and "her" or "him") .. "self!" or n1 .. " was killed by " .. n2 .. "!", MESSAGE_STATUS_WARNING)
            local a = getPlayersInRange({x=32221, y=32180, z=8}, 7, 5)
            if #a < 2 then
                doBroadcastMessage(getPlayerName(a[1]) .. " has won the match!", MESSAGE_STATUS_WARNING)
                doPlayerAddLevel(a[1], 1)
                doTeleportThing(a[1], t.temple)
                doSendMagicEffect(t.temple, CONST_ME_FIREWORK_RED)
                reset()
                reset()
            end
        else
            local b = getTileItemById(pos, t.blockID).uid
            if b > 0 then
                doSendMagicEffect(pos, CONST_ME_BLOCKHIT)
                doRemoveItem(b)
                local r = math.random(10)
                if r < 4 then
                    doCreateItem(r==1 and 8304 or r==2 and 8306 or r==3 and 8310, 1, _pos)
                end
            end
        end
        local N, E, W, S, l = 1, 1, 1, 1, getPlayerStorageValue(cid, t.storage.radius)
        function loopDir(dir)
            local _pos = {x=pos.x+(dir=="E" and E or dir=="W" and -W or 0), y=pos.y+(dir=="N" and -N or dir=="S" and S or 0), z=pos.z}
            if queryTileAddThing(v, _pos, 4) == RETURNVALUE_NOERROR or getTileItemById(_pos, t.blockID).uid > 0 then
                doSendMagicEffect(_pos, t.effect)
                local c = getTopCreature(_pos).uid
                if isPlayer(c) and isInRange(getThingPos(c), t.from, t.to) then
                    doSendMagicEffect(_pos, CONST_ME_GIFT_WRAPS)
                    doTeleportThing(c, t.temple)
                    doSendMagicEffect(t.temple, CONST_ME_MORTAREA)
                    local n1, n2 = getPlayerName(c), getPlayerName(cid)
                    doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex(c) == 0 and "her" or "him") .. "self!" or n1 .. " was killed by " .. n2 .. "!", MESSAGE_STATUS_WARNING)
                    local a = getPlayersInRange({x=32221, y=32180, z=8}, 7, 5)
                    if #a < 2 then
                        doBroadcastMessage(getPlayerName(a[1]) .. " has won the match!", MESSAGE_STATUS_WARNING)
                        doPlayerAddLevel(a[1], 1)
                        doTeleportThing(a[1], t.temple)
                        doSendMagicEffect(t.temple, CONST_ME_FIREWORK_RED)
                        reset()
                        reset()
                        return "endgame"
                    end
                else
                    local b = getTileItemById(_pos, t.blockID).uid
                    if b > 0 then
                        doSendMagicEffect(_pos, CONST_ME_BLOCKHIT)
                        doRemoveItem(b)
                        local r = math.random(10)
                        if r < 4 then
                            doCreateItem(r==1 and 8304 or r==2 and 8306 or r==3 and 8310, 1, _pos)
                        end
                        return false
                    end
                end
            elseif queryTileAddThing(v, _pos, 4) == 3 then
                return false
            end
            return true
        end
        while N <= l do
            local q = loopDir("N")
            if q == "endgame" then
                return doRemoveItem(v, 1)
            elseif not q then
                break
            else
                N = N + 1
            end
        end
        while E <= l do
            local q = loopDir("E")
            if q == "endgame" then
                return doRemoveItem(v, 1)
            elseif not q then
                break
            else
                E = E + 1
            end
        end
        while W <= l do
            local q = loopDir("W")
            if q == "endgame" then
                return doRemoveItem(v, 1)
            elseif not q then
                break
            else
                W = W + 1
            end
        end
        while S <= l do
            local q = loopDir("S")
            if q == "endgame" then
                return doRemoveItem(v, 1)
            elseif not q then
                break
            else
                S = S + 1
            end
        end
    end
    doRemoveItem(v, 1)
end
function onSay(cid, words, param, channel)
    if isInRange(getThingPos(cid), t.from, t.to) then
        setPlayerStorageValue(cid, t.storage.placed, math.max(getPlayerStorageValue(cid, t.storage.placed), 0))
        setPlayerStorageValue(cid, t.storage.max, math.max(getPlayerStorageValue(cid, t.storage.max), 1))
        setPlayerStorageValue(cid, t.storage.radius, math.max(getPlayerStorageValue(cid, t.storage.radius), 1))
        if getPlayerStorageValue(cid, t.storage.placed) < getPlayerStorageValue(cid, t.storage.max) then
            doCreateItem(t.bombID, 1, getThingPos(cid))
            addEvent(boom, t.delay, getThingPos(cid), cid)
            setPlayerStorageValue(cid, t.storage.placed, getPlayerStorageValue(cid, t.storage.placed) + 1)
        end
        return true
    end
end
 
try this..

PHP:
function getPlayersInRange(position, radiusx, radiusy)
	local creaturesList = {}
	for x = -radiusx, radiusx do
		for y = -radiusy, radiusy do
			if not (x == 0 and y == 0) then
				local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z})
				if creature.type == 1 then
					table.insert(creaturesList, creature.uid)
				end
			end
		end
	end

	local creature = getTopCreature(position)
	if creature.type == 1 then
		if not(table.find(creaturesList, creature.uid)) then
			table.insert(creaturesList, creature.uid)
		end
	end
    return creaturesList
end

function isPositionInArray(haystack, needle)
	for i = 1, #haystack do
		if haystack[i].x == needle.x and haystack[i].y == needle.y and haystack[i].z == needle.z then
			return true
		end
	end
	return false
end

local t = {
	from = {x=490, y=495, z=9},
	to = {x=504, y=505, z=9},
	storage = {
		placed = 10001,
		max = 10002,
		radius = 10003
	},
	delay = 3000,
	bombID = 10570,
	effect = CONST_ME_FIREAREA,
	blockID = 9468,
	text = "BOOM!",
	temple = {x=498, y=541, z=9},
	exceptions = {
		{x=490, y=495, z=9},
		{x=491, y=495, z=9},
		{x=490, y=496, z=9},
		
		{x=503, y=495, z=9},
		{x=504, y=495, z=9},
		{x=504, y=496, z=9},
		
		{x=490, y=505, z=9},
		{x=491, y=505, z=9},
		{x=490, y=504, z=9},
		
		{x=503, y=505, z=9},
		{x=504, y=505, z=9},
		{x=504, y=504, z=9}
	}
}
function reset()
	local dummy = doCreateItem(10570, 1, {x=486,y=498,z=9})
	local remover = {x=486,y=498,z=9}
	for x = t.from.x, t.to.x do
		for y = t.from.y, t.to.y do
			local pos = {x=x,y=y,z=t.from.z}
			local i1, i2, i3  = getTileItemById(pos, 8304).uid, getTileItemById(pos, 8306).uid, getTileItemById(pos, 8310).uid
			if i1 > 0 then
				doRemoveItem(i1)
			end
			if i2 > 0 then
				doRemoveItem(i2)
			end
			if i3 > 0 then
				doRemoveItem(i3)
			end
			if queryTileAddThing(dummy, pos, 4) == RETURNVALUE_NOERROR and not isPositionInArray(t.exceptions, pos) then
				doCreateItem(t.blockID, 1, pos)
			end
		end
	end
	doRemoveItem(remover)
end

local function boom(pos, cid)
	local v = getTileItemById(pos, t.bombID).uid
	if isPlayer(cid) and isInRange(getThingPos(cid), t.from, t.to) then
		setPlayerStorageValue(cid, t.storage.placed, getPlayerStorageValue(cid, t.storage.placed) - 1)
		doCreatureSay(cid, t.text, TALKTYPE_ORANGE_2, false, nil, pos)
		doSendMagicEffect(pos, t.effect)
		local c = getTopCreature(pos).uid
		if isPlayer(c) and isInRange(getThingPos(c), t.from, t.to) then
			doSendMagicEffect(pos, CONST_ME_GIFT_WRAPS)
			doTeleportThing(c, t.temple)
			doSendMagicEffect(t.temple, CONST_ME_MORTAREA)
			local n1, n2 = getPlayerName(c), getPlayerName(cid)
			doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex(c) == 0 and "her" or "him") .. "self!" or n1 .. " was killed by " .. n2 .. "!", MESSAGE_STATUS_WARNING)
			local a = getPlayersInRange({x=497, y=500, z=9}, 7, 5)
			if #a < 2 then
				doBroadcastMessage(getPlayerName(a[1]) .. " has won the match!", MESSAGE_STATUS_WARNING)
				doPlayerAddLevel(a[1], 1)
				doTeleportThing(a[1], t.temple)
				doSendMagicEffect(t.temple, CONST_ME_FIREWORK_RED)
				reset()
				reset()
			end
		else
			local b = getTileItemById(pos, t.blockID).uid
			if b > 0 then
				doSendMagicEffect(pos, CONST_ME_BLOCKHIT)
				doRemoveItem(b)
				local r = math.random(10)
				if r < 4 then
					doCreateItem(r==1 and 8304 or r==2 and 8306 or r==3 and 8310, 1, _pos)
				end
			end
		end
		local N, E, W, S, l = 1, 1, 1, 1, getPlayerStorageValue(cid, t.storage.radius)
		function loopDir(dir)
			local _pos = {x=pos.x+(dir=="E" and E or dir=="W" and -W or 0), y=pos.y+(dir=="N" and -N or dir=="S" and S or 0), z=pos.z}
			if queryTileAddThing(v, _pos, 4) == RETURNVALUE_NOERROR or getTileItemById(_pos, t.blockID).uid > 0 then
				doSendMagicEffect(_pos, t.effect)
				local c = getTopCreature(_pos).uid
				if isPlayer(c) and isInRange(getThingPos(c), t.from, t.to) then
					doSendMagicEffect(_pos, CONST_ME_GIFT_WRAPS)
					doTeleportThing(c, t.temple)
					doSendMagicEffect(t.temple, CONST_ME_MORTAREA)
					local n1, n2 = getPlayerName(c), getPlayerName(cid)
					doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex(c) == 0 and "her" or "him") .. "self!" or n1 .. " was killed by " .. n2 .. "!", MESSAGE_STATUS_WARNING)
					local a = getPlayersInRange({x=497, y=500, z=9}, 7, 5)
					if #a < 2 then
						doBroadcastMessage(getPlayerName(a[1]) .. " has won the match!", MESSAGE_STATUS_WARNING)
						doPlayerAddLevel(a[1], 1)
						doTeleportThing(a[1], t.temple)
						doSendMagicEffect(t.temple, CONST_ME_FIREWORK_RED)
						reset()
						reset()
						return "endgame"
					end
				else
					local b = getTileItemById(_pos, t.blockID).uid
					if b > 0 then
						doSendMagicEffect(_pos, CONST_ME_BLOCKHIT)
						doRemoveItem(b)
						local r = math.random(10)
						if r < 4 then
							doCreateItem(r==1 and 8304 or r==2 and 8306 or r==3 and 8310, 1, _pos)
						end
						return false
					end
				end
			elseif queryTileAddThing(v, _pos, 4) == 3 then
				return false
			end
			return true
		end
		while N <= l do
			local q = loopDir("N")
			if q == "endgame" then
				return doRemoveItem(v, 1)
			elseif not q then
				break
			else
				N = N + 1
			end
		end
		while E <= l do
			local q = loopDir("E")
			if q == "endgame" then
				return doRemoveItem(v, 1)
			elseif not q then
				break
			else
				E = E + 1
			end
		end
		while W <= l do
			local q = loopDir("W")
			if q == "endgame" then
				return doRemoveItem(v, 1)
			elseif not q then
				break
			else
				W = W + 1
			end
		end
		while S <= l do
			local q = loopDir("S")
			if q == "endgame" then
				return doRemoveItem(v, 1)
			elseif not q then
				break
			else
				S = S + 1
			end
		end
	end
	doRemoveItem(v, 1)
end
function onSay(cid, words, param, channel)
	if isInRange(getThingPos(cid), t.from, t.to) then
		setPlayerStorageValue(cid, t.storage.placed, math.max(getPlayerStorageValue(cid, t.storage.placed), 0))
		setPlayerStorageValue(cid, t.storage.max, math.max(getPlayerStorageValue(cid, t.storage.max), 1))
		setPlayerStorageValue(cid, t.storage.radius, math.max(getPlayerStorageValue(cid, t.storage.radius), 1))
		if getPlayerStorageValue(cid, t.storage.placed) < getPlayerStorageValue(cid, t.storage.max) then
			doCreateItem(t.bombID, 1, getThingPos(cid))
			addEvent(boom, t.delay, getThingPos(cid), cid)
			setPlayerStorageValue(cid, t.storage.placed, getPlayerStorageValue(cid, t.storage.placed) + 1)
		end
		return true
	end
end

Post any errors.. full ones
 
Anyway lever don't work, it wont tp to playground! And items in bomberman:D 1 more! We played it a little, when the new game start ?
Lever.lua
PHP:
function getPlayersInRange(position, radiusx, radiusy)
	local creaturesList = {}
	for x = -radiusx, radiusx do
		for y = -radiusy, radiusy do
			if not (x == 0 and y == 0) then
				local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z})
				if creature.type == 1 then
					table.insert(creaturesList, creature.uid)
				end
			end
		end
	end

	local creature = getTopCreature(position)
	if creature.type == 1 then
		if not(table.find(creaturesList, creature.uid)) then
			table.insert(creaturesList, creature.uid)
		end
	end
    return creaturesList
end

local t, n, storage = {
	{x=32220, y=32217, z=8},
	{x=32221, y=32217, z=8},
	{x=32222, y=32217, z=8},
	{x=32223, y=32217, z=8}
}, {
	{x=32214, y=32175, z=8},
	{x=32228, y=32185, z=8},
	{x=32228, y=32175, z=8},
	{x=32214, y=32185, z=8}
}, {
	placed = 10001,
	max = 10002,
	radius = 10003
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if item.itemid == 1946 then
		return doTransformItem(item.uid, item.itemid - 1)
	end

	local v = getPlayersInRange({x=32221, y=32180, z=7}, 7, 5)
	if #v > 0 then
		return doPlayerSendCancel(cid, "Please wait for the current match to end.")
	end

	local players = {}
	for i = 1, #t do
		local v = getTopCreature(t[i]).uid 
		players[i] = isPlayer(v) and v or nil
	end

	if #players < 2 then
		return doPlayerSendCancel(cid, "You need at least 2 players to enter.")
	end
	
	local first = players[1] and 1 or players[2] and 2 or players[3] and 3 or players[4] and 4
	for i = 1, 4 do
		if players[i] then
			setPlayerStorageValue(players[i], storage.placed, 0)
			setPlayerStorageValue(players[i], storage.max, 1)
			setPlayerStorageValue(players[i], storage.radius, 1)
			doSendMagicEffect(t[i], CONST_ME_TELEPORT)
			doTeleportThing(players[i], n[i])
			doSendMagicEffect(n[i], CONST_ME_TELEPORT)
		end
	end

	doTransformItem(item.uid, item.itemid + 1)
	return true
end
I don't know, do i have it correct :S
 
Back
Top