• 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!
  • New resources must be posted under Resources tab. A discussion thread will be created automatically, you can't open threads manually anymore.

Action Tetris system by mock

hey mock, some crates gets over another one when the player is going to lose
know my issue???
 
yes
i want to know if that's normal or I misconfigured something
sometimes i can't play tetris again after playing it once
 
ye same to me but reload actions and its fine

i think the script is bad cuz I NEED TO RELOAD ACTIONS to play again
 
:D use this

Lua:
doReloadInfo(RELOAD_ACTIONS, cid)

but there must be a solution
..or we are doing something wrong :ninja:
 
:D use this

Lua:
doReloadInfo(RELOAD_ACTIONS, cid)

but there must be a solution
..or we are doing something wrong :ninja:

where should i add that :) ?

+
i have a error..
[19:14:17.328] [Error - Action Interface]
[19:14:17.328] In a timer event called from:
[19:14:17.328] data/actions/scripts/tetris.lua:eek:nUse
[19:14:17.328] Description:
[19:14:17.328] (luaGetThingFromPos) Tile not found
 
Last edited:
@Cybershot
i will update this script, and i think i can fix it
@bogart
WTF? dont need reload lol
TFS 0.3.?
@Teddy
WTF [2]
tfs 0.3.?
 
0.4 .. does it not work for it :O ?
and i notic that my map dont have "EARTH" on the side do i need that?EDIT (dident help)
+

The blocks go in the wall
[Problems Solved]
only 1 left! :O

i need to reload actions every time i have finish a tetris game
 
Last edited:
[16/04/2010 20:17:51] [Error - Action Interface]
[16/04/2010 20:17:51] In a timer event called from:
[16/04/2010 20:17:51] data/actions/scripts/tetris.lua:eek:nUse
[16/04/2010 20:17:51] Description:
[16/04/2010 20:17:51] data/actions/scripts/tetris.lua:294: attempt to concatenate local 'poi' (a boolean value)
[16/04/2010 20:17:51] stack traceback:
[16/04/2010 20:17:51] data/actions/scripts/tetris.lua:294: in function <data/actions/scripts/tetris.lua:284>

help?
 
Im having the problem when I step on a tile.. the boxes appear, they dont move but I still loose? :s Anyone know what to do here?
 
Can someone fix the bug so you can use it more then on time each reload :p
=p if mock updates the script, i release the PHP Records Script
Lua:
  --[[
Tetris system By mock the bear (mtb)
Email: [email][email protected][/email]
Enjoy ""
]]
local config = {
    uppos = {x=1003,y=1010,z=7},
    dowpos = {x=1009,y=1020,z=7},
    playerpos = {x=1011,y=1017,z=7},
    block_start={x=1006,y=1011,z=7},
    exit={x=1011,y=1014,z=7},
    delay=10,
    item=1739,
    effects = {
        mark=3,
        burn=15,
        },
    blocks = {
        --
            {
             {
                {0,1,0},
                {1,1,1},
                {0,0,0},
                },
                 {
                {0,1,0},
                {0,1,1},
                {0,1,0},
                },
                 {
                {0,0,0},
                {1,1,1},
                {0,1,0},
                },
                 {
                {0,1,0},
                {1,1,0},
                {0,1,0}
                }
            },

        {
             {
                {1,1,1},
            },
             {
                {1},
                {1},
                {1},
            },
        },
        --
        {
        {
            {1},
        },
        },
        {
        {
        {1,1},{1,1},
        },
        },


    },
    data={false},
}

local function createItensInArea(item, pos, area) -- Function by mock
    local centro = {}
    local coisa = {}
    centro.y = math.floor(#area/2)+1
    for y = 1, #area do
        for x = 1, #area[y] do
            number = area[y][x]
            if number > 0 then
                centro.x = math.floor(table.getn(area[y])/2)+1
                local pos = {x = pos.x + x - centro.x, y = pos.y + y - centro.y, z = pos.z}
                local items = doCreateItem(item, 1, pos)
                table.insert(coisa, 1, items)
            end
        end
    end
    return coisa
end
local function removeItensInArea(item, pos, area) -- Function by mock
    local centro = {}
    centro.y = math.floor(table.getn(area)/2)+1
    for y = 1, table.getn(area) do
        for x = 1, table.getn(area[y]) do
            number = area[y][x]
            if number > 0 then
                centro.x = math.floor(table.getn(area[y])/2)+1
                local pos = {x = pos.x + x - centro.x, y = pos.y + y - centro.y, z = pos.z,stackpos = 255}
                local coisa = getThingfromPos(pos)
                if coisa.itemid == item then
                  doRemoveItem(coisa.uid,1)
                end
            end
        end
    end
end
local function checkItensInArea(item, pos, area,coisas) -- Function by mock
    local centro = {}
    if coisas == nil then
        coisas = {}
    end
    centro.y = math.floor(table.getn(area)/2)+1
    for y = 1, table.getn(area) do
        for x = 1, table.getn(area[y]) do
            number = area[y][x]
            if number > 0 then
                centro.x = math.floor(table.getn(area[y])/2)+1
                local pos = {x = pos.x + x - centro.x, y = pos.y + y - centro.y, z = pos.z,stackpos = 1}
                local coisa = getThingfromPos(pos)
                if coisa.itemid == item then
                    if not isInArray(coisas, coisa.uid) then
                        return true
                    end
                end
            end
        end
    end
    return false
end
function clean(pos1,pos2,stack) -- Function by mock
    for x = 0, math.floor(pos2.x-pos1.x) do
        for y = 0, math.floor(pos2.y-pos1.y) do
            local coisa = getThingfromPos({x = pos1.x+x, y = pos1.y+y, z = pos1.z, stackpos = stack})
            if coisa.itemid == config.item then
                doRemoveItem(coisa.uid,1)
            end
        end
    end
end
local function pushdown(pos1,pos2,item) -- push all piece 1 sqm to down
    -- Function by mock
    local ymax = math.floor(pos2.y-pos1.y)
    for y = 1,ymax  do
        for x = 1, math.floor(pos2.x-pos1.x)-1 do
            local coisa = getThingfromPos({x = pos1.x+x, y = pos1.y+(ymax-y), z = pos1.z, stackpos = 1})
            if coisa.itemid == item then
                local p2 = getThingPos(coisa.uid)
                doRemoveItem(coisa.uid,1)
                p2.y = p2.y+1
                doCreateItem(item, 1, p2)
            end
        end
    end
end
local function checkline(pos,cid,item) -- Function by mock
    local sizex = config.dowpos.x-config.uppos.x-1
    local t = {}
    for x=1,sizex do
        local using = {x=pos.x+x,y=pos.y,z=pos.z,stackpos=1}
        local igz = getThingfromPos(using)

        if igz.itemid == item then

            table.insert(t,1,{using,igz.uid})
        end
    end
    if #t == sizex then
        setPlayerStorageValue(cid,21451, getPlayerStorageValue(cid, 21451)+1)
        for i=1,#t do
            local f = t[i]
            doRemoveItem(f[2],1)
            if config.effects.burn then
                doSendMagicEffect(f[1],config.effects.burn)
            end
        end
        pushdown(config.uppos,{x=config.dowpos.x,y=pos.y,z  =config.dowpos.z},item)
        checkline(pos,cid,item)
    end
end
function doSendMagicEffectInArea(pos,effect,area,cid) -- Function by mock
    local centro = {}
    centro.y = math.floor(table.getn(area)/2)+1
    for y = 1, table.getn(area) do
        for x = 1, table.getn(area[y]) do
            if area[y][x] > 0 then
                centro.x = math.floor(table.getn(area[y])/2)+1
                if type(effect) == 'table' then
                    doSendMagicEffect({x=pos.x+x-centro.x,y=pos.y+y-centro.y,z= pos.z},(effect[area[y][x]] or 0),cid)
                else
                    doSendMagicEffect({x=pos.x+x-centro.x,y=pos.y+y-centro.y,z= pos.z},effect or 0,cid)
                end
            end
        end
    end
    return true
end

local function pedra(pos,cid,area) -- Function by mock
        config.data = config.data or {}
        config.data[6] = config.data[6] or config.delay
        config.data[5] = config.data[5] or 1
        config.data[5] = config.data[5]+1
        if config.data[1] == false then
            config.data[1] = #area == 1 and 1 or math.random(1,#area)
        end
        local cre_pos = getCreaturePosition(cid)
        pos.stackpos = 255
        pos.y = pos.y-1
        if getThingfromPos(pos).itemid == config.item then
            removeItensInArea(config.item,pos, area[config.data[1]])
        end
        if config.data[5] >= config.data[6] then
            pos.y = pos.y+1
            config.data[5] = 1
        end
        pos.stackpos = 1
        if cre_pos.x == config.playerpos.x+1 then
            doTeleportThing(cid, config.playerpos)
            pos.x = pos.x+1
            local coisa2 = getThingfromPos(pos)
            if checkItensInArea(463,pos, area[config.data[1]])  or checkItensInArea(config.item,pos, area[config.data[1]]) then
                pos.x = pos.x-1
                doSendAnimatedText(cre_pos, "Block", math.random(1,255))
            end
        elseif cre_pos.x == config.playerpos.x and cre_pos.y == config.playerpos.y+1 then
            doTeleportThing(cid, config.playerpos)
            pos.y = pos.y+1
            if checkItensInArea(463,pos, area[config.data[1]]) or checkItensInArea(config.item,pos, area[config.data[1]]) then
                pos.y = pos.y-1
                doSendAnimatedText(cre_pos, "Block", math.random(1,255))
            end
        elseif cre_pos.x == config.playerpos.x and cre_pos.y == config.playerpos.y-1 then
            doTeleportThing(cid, config.playerpos)
            if #area > 1 then
                local rot = #area < config.data[1]+1 and 1 or config.data[1]+1
                if checkItensInArea(463,pos, area[rot]) or checkItensInArea(config.item,pos, area[rot]) then
                    doSendAnimatedText(cre_pos, "Block", math.random(1,255))
                else
                    config.data[1] = rot
                end
            end
        elseif cre_pos.x == config.playerpos.x-1 then
            doTeleportThing(cid, config.playerpos)
            pos.x = pos.x-1
            local coisa2 = getThingfromPos(pos)
            if checkItensInArea(463,pos, area[config.data[1]]) or checkItensInArea(config.item,pos, area[config.data[1]])  then
                pos.x = pos.x+1
                doSendAnimatedText(cre_pos, "Block", math.random(1,255))
            end
        end
        if config.data[3] then
            config.data[3] = nil
            return
        end
        pos.stackpos=1
        if getThingfromPos(pos).itemid == config.item then
            doPlayerSendTextMessage(config.data[2], 24, 'You lose!')
            doReloadInfo(RELOAD_ACTIONS, cid)
            clean(config.uppos,config.dowpos,2)
            clean(config.uppos,config.dowpos,1)
            creation = nil
            doTeleportThing(config.data[2], config.exit)
            config.data[2] = nil
            config.data[1] = false
            config.data[3] = true
            return
        end
        local uida = createItensInArea(config.item,pos, area[config.data[1]])
        if config.effects.mark then
            doSendMagicEffectInArea(pos,config.effects.mark, area [config.data[1]] )
        end
        local humrox = pos
        pos.y = pos.y+1
        if not checkItensInArea(463,pos, area[config.data[1]]) and not checkItensInArea(config.item,humrox, area[config.data[1]],uida) then
            addEvent(pedra, 100, pos,cid,area)
        else
        e = 0
        for i=0,((config.dowpos.y)-(config.uppos.y)) do
            e = e-1
            addEvent(checkline,100*i,{x=config.uppos.x,y= config.dowpos.y +e,z=config.uppos.z},cid,config.item)
        end
      creation = nil
      config.data[1] = false
      end
end


local function control_loop(startpos) -- Function by mock
    if not config.data[2] then
        return
    end
    doSendMagicEffect(getCreaturePosition(config.data[2]), 1)
    local poi = getPlayerStorageValue(config.data[2], 21451)
    if poi == -1 then
        setPlayerStorageValue(config.data[2],21451, 0)
        poi = 0
    end
    doSendAnimatedText(getCreaturePosition(config.data[2]), "points: "..poi, math.random(1,255))
    startpos.stackpos = 2
    local coisaa = getThingfromPos(startpos)
    if not creation then
       creation = true
       addEvent(pedra, 1000, {x=config.block_start.x,y=config.block_start.y,z= config.block_start.z ,stackpos=1},config.data[2],config.blocks[math.random(1,#config.blocks)])
    end
    if coisaa.itemid == config.item then
        doPlayerSendTextMessage(config.data[2], 24, 'You lose!')
        doReloadInfo(RELOAD_ACTIONS, cid)
        clean(config.uppos,config.dowpos,2)
        clean(config.uppos,config.dowpos,1)
        creation = nil
        doTeleportThing(config.data[2], config.exit)
        config.data[2] = nil
        config.data[1] = false
        config.data[3] = true
    else
        addEvent(control_loop, 300, startpos)
    end
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if not config.data[2] then
        doTeleportThing(cid, config.playerpos)
        setPlayerStorageValue(cid,21451, 0)
        config.data[2] = cid
        addEvent(control_loop, 1000,config.block_start)
    else
        doPlayerSendCancel(cid,'Tetris are in use. Please wait.')
    end
    return false
end
 
When peoples do this then they cant do it again until in restart server or reload actions, why? can someone help please?
 
Last edited:
Back
Top