Ir para conteúdo

[Action] Snake System


Strayzer

Posts Recomendados

Snake System

(É o jogo da cobrinha, geralmente tem em vários celulares)

 

Bem, eu estava pesquisando uns scripts em alguns fóruns e achei esse.

 

Antes de tudo venho falar que o script NÃO É MEU, é do Mock, só estou trazendo o conteúdo ao XTibia.com.

 

Bem, vamos ao script.

 

Primeiro abra seu map editor e crie uma área de 13x9sqms.

Exemplo:

lugar1.png

 

No andar de cima coloque o itemid 460

Exemplo:

lugar2.png

 

E para entrar na arena:

lugar3.png

(Mais pra frente você irá entender)

 

Ok, agora já pode fechar seu map editor.

 

Agora em actions.xml adicione esta tag:

<action itemid="9564" event="script" value="snakesys.lua"/>

 

Crie em data/actions/scripts um arquivo chamado snakesys.lua e coloque isso nele:

function onUse(cid, item, frompos, item2, topos)
       if not isPlayer(getGlobalStorageValue(SNAKE.freeglobalsto  rage)) then
               doTeleportThing(cid,SNAKE.controlpos)
               SNAKE.timer(cid,1,nil,item.actionid == 0 and 500 or item.actionid)
               doPlayerSendTextMessage(cid,25,'Segure a tecla control e use as setas para mover a cobra.')
               SNAKE.generateFood()
       else
               doPlayerSendTextMessage(cid,25,'Espere alguem sair.')
       end
end

 

Depois crie dentro da pasta data/lib um arquivo tambem chamado snakesys.lua e ponha isso(é um pouquinho grande .-.):

 --[[
Script by Mock the bear
]]
SNAKE = {
       _VERSION="1.0 by mock",
       ---Snake config
       itemid=1739,
       freeglobalstorage=28103,
       itemFood=6394,
       controlpos={x=1013,y=1164,z=6},
       exitpos = {x=1009,y=1157,z=7},
       centerpos={x=1012,y=1163,z=7},
       timer = function(cid,n,pos_,time)
               local pos_ = pos_ or {{SNAKE.centerpos}}
               setGlobalStorageValue(SNAKE.freeglobalstorage,cid)
               if not isPlayer(cid) then
                       SNAKE.clean()
                       return
               end
                       for i,pos in pairs(pos_) do
                               SNAKE.find_and_delete(pos[1])
                               if i == 1 then
                                       pos[2] = SNAKE.copypos(pos[1])
                                       pos[1] = getPosByDir({x=pos[1].x,y=pos[1].y,z=pos[1].z,stackpos=255},getCreatureLookDir(cid))
                               else
                                       pos[2] = SNAKE.copypos(pos[1])
                                       pos[1] = pos_[i-1][2]
                               end
                               local ret,p,walk = SNAKE.check(pos[1])
                               if ret == 1 or ret == 3 then
                                       addEvent(doTeleportThing,1000,cid,SNAKE.exitpos)
                                       addEvent(doCreatureSay,1100,cid,'Points '..(#pos_-1)..'.')
                                       SNAKE.clean()
                                       setGlobalStorageValue(SNAKE.freeglobalstorage,0)
                                       return
                               end
                               if ret == 2 then
                                       doRemoveItem(p.uid,-1)
                                       if p.itemid == SNAKE.itemFood then
                                               pos_[#pos_+1] = {pos[2],pos[2]}
                                               for i=1,5 do
                                                       addEvent(doSendMagicEffect,100*i,pos[1],29)
                                               end
                                               SNAKE.generateFood()
                                       end
                               end
                               doCreateItem(SNAKE.itemid,1,pos[1])

                       end
                       local plpos = getCreaturePosition(cid)
                       local generated = {}
                       for i=0,3 do
                               generated[i] = getPosByDir({x=SNAKE.controlpos.x,y=SNAKE.controlp  os.y,z=SNAKE.controlpos.z},i)
                       end
                       for i,pos in pairs(generated) do
                               if SNAKE.samepos(plpos,pos) then

                                       doTeleportThing(cid,SNAKE.controlpos,false)
                               end
                               addEvent(doSendMagicEffect,100,pos,56,cid)
                       end
               addEvent(SNAKE.timer,time,cid,n,pos_,time)
       end,
       copypos = function(p)
               return {x=p.x,y=p.y,z=p.z,stackpos=p.stackpos}
       end,
       samepos = function(p1,p2)
               if p1.x == p2.x and p2.y == p2.y then
                       return true
               end
               return false
       end,
       generateFood = function()
               local pp = {x=SNAKE.centerpos.x+math.random(-6,6),y=SNAKE.centerpos.y+math.random(-4,4),z=SNAKE.centerpos.z}
               for i=1,5 do
                       addEvent(doSendMagicEffect,100*i,pp,30)
               end
               doCreateItem(SNAKE.itemFood,1,pp)
       end,
       clean = function()
               for y=-4,4 do
                       for x=-6,6 do
                               local pp = {x=SNAKE.centerpos.x+x,y=SNAKE.centerpos.y+y,z=SNA  KE.centerpos.z}
                               for i=250,255 do
                                       pp.stackpos = i
                                       local p = getThingFromPos(pp)
                                       if p.itemid ~= 0 then
                                               doRemoveItem(p.uid,-1)
                                               doSendMagicEffect(pp,15)
                                       end
                               end
                       end
               end
       end,
       check = function(pos)
               for i=1,10 do
                       pos.stackpos = i
                       local p = getThingFromPos(pos)
                       if p.itemid == SNAKE.itemid then
                               return 1,p,true
                       elseif not SNAKE.isWalkable(pos) then
                               return 3,p,false
                       elseif p.itemid ~= 0 then
                               return 2,p
                       end
               end
               return false
       end,
       find_and_delete = function(pos)
               for i=0,255 do
                       pos.stackpos = 255-i
                       local p = getThingFromPos(pos)
                       if p.itemid == SNAKE.itemid then
                               return doRemoveItem(p.uid,1)
                       end
               end
       end,
       isWalkable = function(pos, creature, proj, pz)-- by Nord
               if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
               if getTopCreature(pos).uid > 0 and creature then return false end
               if getTileInfo(pos).protection and pz then return false, true end
               local n = not proj and 3 or 2
               for i = 0, 255 do
                       pos.stackpos = i
                       local tile = getTileThingByPos(pos)
                       if tile.itemid ~= 0 and not isCreature(tile.uid) then
                               if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                                       return false
                               end
                       end
               end
               return true
       end,
}

 

Vídeo demonstrando o sistema e ensinando a configurar:

 

 

 

 

Créditos

Mock - Pelos scripts, imagens e o vídeo

Strayzer (eu) - Por trazer o conteúdo ao XTibia.com

 

Enjoy :D

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

  • 2 months later...

não funciona.

 

[21/02/2011 00:25:07] [Error - LuaScriptInterface::loadFile] data/lib/snakesys.lua:53: '}' expected near 'os'

[21/02/2011 00:25:07] [Warning - LuaScriptInterface::initState] Cannot load data/lib/

[21/02/2011 00:25:07] [Error - LuaScriptInterface::loadFile] data/lib/snakesys.lua:53: '}' expected near 'os'

[21/02/2011 00:25:07] [Warning - LuaScriptInterface::initState] Cannot load data/lib/

[21/02/2011 00:25:08] [Error - LuaScriptInterface::loadFile] data/lib/snakesys.lua:53: '}' expected near 'os'

[21/02/2011 00:25:08] [Warning - LuaScriptInterface::initState] Cannot load data/lib/

[21/02/2011 00:25:08] [Error - LuaScriptInterface::loadFile] data/actions/scripts/snakesys.lua:2: ')' expected near 'rage'

[21/02/2011 00:25:08] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/snakesys.lua)

[21/02/2011 00:25:08] data/actions/scripts/snakesys.lua:2: ')' expected near 'rage'

[21/02/2011 00:25:09] [Error - LuaScriptInterface::loadFile] data/lib/snakesys.lua:53: '}' expected near 'os'

[21/02/2011 00:25:09] [Warning - LuaScriptInterface::initState] Cannot load data/lib/

 

[21/02/2011 00:25:10] [Error - LuaScriptInterface::loadFile] data/lib/snakesys.lua:53: '}' expected near 'os'

[21/02/2011 00:25:10] [Warning - LuaScriptInterface::initState] Cannot load data/lib/

[21/02/2011 00:25:10] [Error - LuaScriptInterface::loadFile] data/lib/snakesys.lua:53: '}' expected near 'os'

[21/02/2011 00:25:10] [Warning - LuaScriptInterface::initState] Cannot load data/lib/

[21/02/2011 00:25:10] [Error - LuaScriptInterface::loadFile] data/lib/snakesys.lua:53: '}' expected near 'os'

[21/02/2011 00:25:10] [Warning - LuaScriptInterface::initState] Cannot load data/lib/

Link para o comentário
Compartilhar em outros sites

  • 1 month later...

[02/04/2011 13:21:19] [Error - LuaScriptInterface::loadFile] data/actions/lib/snakesys.lua:59: '}' expected near 'os'

[02/04/2011 13:21:19] [Warning - BaseEvents::loadFromXml] Cannot load actions/lib/

[02/04/2011 13:21:19] [Warning - Actions::registerEvent] Duplicate registered item id: 3678

[02/04/2011 13:21:19] [Warning - Actions::registerEvent] Duplicate registered item id: 2420

[02/04/2011 13:21:19] [Warning - Actions::registerEvent] Duplicate registered item id: 2442

[02/04/2011 13:21:19] [Warning - Actions::registerEvent] Duplicate registered item id: 1211

[02/04/2011 13:21:19] [Warning - Actions::registerEvent] Duplicate registered item id: 1214

[02/04/2011 13:21:19] [Warning - Actions::registerEvent] Duplicate registered item id: 2550

[02/04/2011 13:21:19] [Warning - Actions::registerEvent] Duplicate registered item id: 2694

[02/04/2011 13:21:19] [Warning - Actions::registerEvent] Duplicate registered item id: 2692

[02/04/2011 13:21:19] [Warning - Actions::registerEvent] Duplicate registered item id: 2693

[02/04/2011 13:21:19] [Error - LuaScriptInterface::loadFile] data/actions/scripts/snakesys.lua:2: ')' expected near 'rage'

[02/04/2011 13:21:19] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/snakesys.lua)

[02/04/2011 13:21:19] data/actions/scripts/snakesys.lua:2: ')' expected near 'rage'

[02/04/2011 13:21:19] Reloaded actions.

 

 

 

Não sei mais como que posso fazer pra arrumar, pode dar uma ajuda?

Ou postando uma editada?

 

aguardo.

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

  • 1 month later...

Galera tem só alguns erros de digitação, por isso ninguem consegue fazer rodar.

 

Abaixo esta o codigo correto.

 

 --[[
Script by Mock the bear
]]
SNAKE = {
       _VERSION="1.0 by mock",
       ---Snake config
       itemid=12496, <Troquei o item>Apague isto depois
       freeglobalstorage=28103,
       itemFood=8847, <Troquei o item>Apague isto depois
       controlpos={x=62,y=188 ,z=6}, <MUDE PARA SEU LOCAL> Apague isto depois
       exitpos = {x=73,y=186,z=7},   <MUDE PARA SEU LOCAL> Apague isto depois
       centerpos={x=61,y=187,z=7},   <MUDE PARA SEU LOCAL> Apague isto depois
       timer = function(cid,n,pos_,time)
               local pos_ = pos_ or {{SNAKE.centerpos}}
               setGlobalStorageValue(SNAKE.freeglobalstorage,cid)
               if not isPlayer(cid) then
                       SNAKE.clean()
                       return
               end
                       for i,pos in pairs(pos_) do
                               SNAKE.find_and_delete(pos[1])
                               if i == 1 then
                                       pos[2] = SNAKE.copypos(pos[1])
                                       pos[1] = getPosByDir({x=pos[1].x,y=pos[1].y,z=pos[1].z,stackpos=255},getCreatureLookDir(cid))
                               else
                                       pos[2] = SNAKE.copypos(pos[1])
                                       pos[1] = pos_[i-1][2]
                               end
                               local ret,p,walk = SNAKE.check(pos[1])
                               if ret == 1 or ret == 3 then
                                       addEvent(doTeleportThing,1000,cid,SNAKE.exitpos)
                                       addEvent(doCreatureSay,1100,cid,'Points '..(#pos_-1)..'.')
                                       SNAKE.clean()
                                       setGlobalStorageValue(SNAKE.freeglobalstorage,0)
                                       return
                               end
                               if ret == 2 then
                                       doRemoveItem(p.uid,-1)
                                       if p.itemid == SNAKE.itemFood then
                                               pos_[#pos_+1] = {pos[2],pos[2]}
                                               for i=1,5 do
                                                       addEvent(doSendMagicEffect,100*i,pos[1],29)
                                               end
                                               SNAKE.generateFood()
                                       end
                               end
                               doCreateItem(SNAKE.itemid,1,pos[1])

                       end
                       local plpos = getCreaturePosition(cid)
                       local generated = {}
                       for i=0,3 do
                               generated[i] = getPosByDir({x=SNAKE.controlpos.x,y=SNAKE.controlpos.y,z=SNAKE.controlpos.z},i)
                       end
                       for i,pos in pairs(generated) do
                               if SNAKE.samepos(plpos,pos) then

                                       doTeleportThing(cid,SNAKE.controlpos,false)
                               end
                               addEvent(doSendMagicEffect,100,pos,56,cid)
                       end
               addEvent(SNAKE.timer,time,cid,n,pos_,time)
       end,
       copypos = function(p)
               return {x=p.x,y=p.y,z=p.z,stackpos=p.stackpos}
       end,
       samepos = function(p1,p2)
               if p1.x == p2.x and p2.y == p2.y then
                       return true
               end
               return false
       end,
       generateFood = function()
               local pp = {x=SNAKE.centerpos.x+math.random(-6,6),y=SNAKE.centerpos.y+math.random(-4,4),z=SNAKE.centerpos.z}
               for i=1,5 do
                       addEvent(doSendMagicEffect,100*i,pp,30)
               end
               doCreateItem(SNAKE.itemFood,1,pp)
       end,
       clean = function()
               for y=-4,4 do
                       for x=-6,6 do
                               local pp = {x=SNAKE.centerpos.x+x,y=SNAKE.centerpos.y+y,z=SNAKE.centerpos.z}
                               for i=250,255 do
                                       pp.stackpos = i
                                       local p = getThingFromPos(pp)
                                       if p.itemid ~= 0 then
                                               doRemoveItem(p.uid,-1)
                                               doSendMagicEffect(pp,15)
                                       end
                               end
                       end
               end
       end,
       check = function(pos)
               for i=1,10 do
                       pos.stackpos = i
                       local p = getThingFromPos(pos)
                       if p.itemid == SNAKE.itemid then
                               return 1,p,true
                       elseif not SNAKE.isWalkable(pos) then
                               return 3,p,false
                       elseif p.itemid ~= 0 then
                               return 2,p
                       end
               end
               return false
       end,
       find_and_delete = function(pos)
               for i=0,255 do
                       pos.stackpos = 255-i
                       local p = getThingFromPos(pos)
                       if p.itemid == SNAKE.itemid then
                               return doRemoveItem(p.uid,1)
                       end
               end
       end,
       isWalkable = function(pos, creature, proj, pz)-- by Nord
               if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
               if getTopCreature(pos).uid > 0 and creature then return false end
               if getTileInfo(pos).protection and pz then return false, true end
               local n = not proj and 3 or 2
               for i = 0, 255 do
                       pos.stackpos = i
                       local tile = getTileThingByPos(pos)
                       if tile.itemid ~= 0 and not isCreature(tile.uid) then
                               if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                                       return false
                               end
                       end
               end
               return true
       end,
}

 

Abraço ! xÐ

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

o unico erro que deu no meu foi isso

[12/06/2011 14:46:46] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/snakesys.lua)

[12/06/2011 14:46:46] data/actions/scripts/snakesys.lua:2: ')' expected near 'rage'

se algm puder me ajudar a tirar o sistema é mto massa '-'
Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...
  • 3 weeks later...

Lol troca isso

 

Crie em data/actions/scripts um arquivo chamado snakesys.lua e coloque isso nele:

 

function onUse(cid, item, frompos, item2, topos)

if not isPlayer(getGlobalStorageValue(SNAKE.freeglobalsto rage)) then

doTeleportThing(cid,SNAKE.controlpos)

SNAKE.timer(cid,1,nil,item.actionid == 0 and 500 or item.actionid)

doPlayerSendTextMessage(cid,25,'Segure a tecla control e use as setas para mover a cobra.')

SNAKE.generateFood()

else

doPlayerSendTextMessage(cid,25,'Espere alguem sair.')

end

end

 

 

 

 

Por isso

 

function onUse(cid, item, frompos, item2, topos)

if not isPlayer(getGlobalStorageValue(SNAKE.freeglobalstorage)) then

doTeleportThing(cid,SNAKE.controlpos)

SNAKE.timer(cid,1,nil,item.actionid == 0 and 500 or item.actionid)

doPlayerSendTextMessage(cid,25,'Segure a tecla control e use as setas para mover a cobra.')

SNAKE.generateFood()

else

doPlayerSendTextMessage(cid,25,'Espere alguem sair.')

end

end

Link para o comentário
Compartilhar em outros sites

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

Aew script funcionou perfeitamente. Mas gostaria de saber se não teria como você adapta-lo para quando o player fize-se X pontos ele ganha-se um item Y (aparecendo a msg "você conseguiu X pontos e ganhou Y item"), assim poderei usar em quest \o/

OBS: só pode ganhar o item 1 vez cada player.

 

E gostaria de saber também, onde eu edito a velocidade de cada nível de dificuldade.

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

×
×
  • Criar Novo...