data/movements/scripts/Genius.lua:
CurrentSteps = {} CurrentSequence = {} PuzzleGeniusConfig = { centerPlayerPos = {x=988,y=985,z=7}, effectsid = { [9562] = {1, 0}, [9563] = {0, 1}, [9564] = {-1, 0}, [9565] = {0, -1} }, appearInterval = 1, disapear = 0.6, backPos = {x=987,y=982,z=7}, rewardPos = {x=995,y=988,z=6}, roundTimes = 100, } CurrentSequence = {} PuzzleGenius = {} function randomIndexFromTable(tab) local tb = {} for i,x in pairs(tab) do table.insert(tb, i) end return tb[math.random(1, #tb)] end function tileEffect(tileid, pos, int) local tile = getThingFromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=0}) doItemSetAttribute(tile.uid, "aid", 6661) local a = doCreateItem(tileid, pos) addEvent(function() local tile = getThingFromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=1}).uid doRemoveItem(tile, 1) end, int*1000) end function PuzzleGenius:ExecuteSequence(cid) if #CurrentSequence >= PuzzleGeniusConfig.roundTimes then doTeleportThing(cid, PuzzleGeniusConfig.rewardPos) doPlayerSetNoMove(cid, false) CurrentSteps = {} CurrentSequence = {} return true end table.insert(CurrentSequence, randomIndexFromTable(PuzzleGeniusConfig.effectsid)) for i,x in ipairs(CurrentSequence) do addEvent(tileEffect, PuzzleGeniusConfig.appearInterval*i*1000, x, {x=PuzzleGeniusConfig.centerPlayerPos.x+PuzzleGeniusConfig.effectsid[x][1], y=PuzzleGeniusConfig.centerPlayerPos.y+PuzzleGeniusConfig.effectsid[x][2], z=PuzzleGeniusConfig.centerPlayerPos.z},PuzzleGeniusConfig.disapear) end addEvent(doPlayerSetNoMove, (PuzzleGeniusConfig.appearInterval*#CurrentSequence+PuzzleGeniusConfig.disapear)*1000, cid, false) end function PuzzleGenius:Check(cid, currentSteps) if currentSteps[#currentSteps] == CurrentSequence[#currentSteps] then return true end return false end function onStepIn(cid, item, pos, fromPos) if pos.x == PuzzleGeniusConfig.centerPlayerPos.x and pos.y == PuzzleGeniusConfig.centerPlayerPos.y then if #CurrentSequence < 1 then doPlayerSetNoMove(cid, true) return PuzzleGenius:ExecuteSequence(cid) else return false end end local coordinates = {pos.x-fromPos.x, pos.y-fromPos.y} for i,x in pairs(PuzzleGeniusConfig.effectsid) do if x[1] == coordinates[1] and x[2] == coordinates[2] then table.insert(CurrentSteps, i) if PuzzleGenius:Check(cid, CurrentSteps) then doCreateItem(i, {x=PuzzleGeniusConfig.centerPlayerPos.x+coordinates[1], y=PuzzleGeniusConfig.centerPlayerPos.y+coordinates[2], z=PuzzleGeniusConfig.centerPlayerPos.z}) end end end if PuzzleGenius:Check(cid, CurrentSteps) then doTeleportThing(cid, fromPos, true) if #CurrentSteps == #CurrentSequence then doPlayerSetNoMove(cid, true) CurrentSteps = {} addEvent(function() PuzzleGenius:ExecuteSequence(cid) end, 500) end else doTeleportThing(cid, PuzzleGeniusConfig.backPos) CurrentSteps = {} CurrentSequence = {} end return TRUE end function onStepOut(cid, item, pos, fromPos) local tile = getThingFromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=1}) for i,x in pairs(PuzzleGeniusConfig.effectsid) do if i == tile.itemid then addEvent(function() local tilee = getThingFromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=1}).uid doRemoveItem(tilee, 1) end, 100) break end end return TRUE end
tags movements.xml:
<movevent type="StepIn" actionid="6661" event="script" value="Genius.lua"/> <movevent type="StepOut" actionid="6661" event="script" value="Genius.lua"/>
Mapa:
A - Action ID 6661.
B - Teleport que teleporta para A, centerPlayerPos no script.
As pedras ou qlqr outro item que voce quizer botar sao obrigatorias para nao ocorrerem bugs,
E os sqm dentro das pedras devem ter a caracteristica de nao poder logar.
Script antigo... whatever postei nada pra fazer.