Ir para conteúdo

Genius Movement.


MatheusGlad

Posts Recomendados



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:

1in0c2.png

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.

Editado por MatheusMkalo
Link para o comentário
Compartilhar em outros sites

Matheus dando uma aula de como ser mito no jogo, xD.

 

Falando sério:

Muito legal a sua contribuição para o xtibia, logo logo estarei testando aqui...

Ainda mais tem vídeo, isso é uma coisa inovadora nos scripts, pois poucos postados aqui no xtibia tem isso.

Link para o comentário
Compartilhar em outros sites

nossa mkalo sempre inovando com suas idéias geniais uhauahauua

sempre gostei desse jogo,o código está muito bem formatado,parabéns amigo!

com certeza vc terá meu voto no concurso ._.

sucesso parceiro,fica com deus

 

REP+

Link para o comentário
Compartilhar em outros sites

  • 2 months later...
  • 2 months later...

Cara, inceramente, eu não consegui compreender como faço para eu colocar pra funcionar... Eu coloquei os scripts recomendados por vc.

 

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

 

 

 

Entao, adicionei a Tag :

 

<movevent type="StepIn" actionid="6661" event="script" value="Genius.lua">

<movevent type="StepOut" actionid="6661" event="script" value="Genius.lua">

 

 

Pois entao adicionei no meu servidor e coloquei no mapa :

 

 

>semttuloxzz.png</noscript>

 

 

Ai eu modifiquei ele para :

 

 

CurrentSteps = {}

CurrentSequence = {}

PuzzleGeniusConfig = {

centerPlayerPos = {x=10181,y=10004,z=12},

effectsid = {

[9562] = {1, 0},

[9563] = {0, 1},

[9564] = {-1, 0},

[9565] = {0, -1}

},

appearInterval = 1,

disapear = 0.6,

backPos = {x=10182,y=10000,z=12},

rewardPos = {x=10181,y=10004,z=12},

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

 

 

Oq edito ? Oque eu modifico ? Me ajuda Por Favor.

Editado por pkemomm
Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...
  • 4 weeks later...
  • 3 weeks later...
  • 3 years later...

sei que já faz tempo o post, desculpe. achei muito interessante... como faço para ele realizar tal ação depois de "x" rodadas, tipo doTelepor... depois q ele acertou 6 vezes, alguém pode ajudar?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...