Ir para conteúdo
Entre para seguir isso  
Eventide

Snake System [v3]

Recommended Posts

Eventide    7
Eventide

Snake

System

By Eventide

 

-------------------------------------------

Autor: Eventide

Nome: Snake System

Versão: 8.1+ com database SQL

:confused: O que é isso? :confused:

Você com certeza conhece aquele jogo de mini-game chamado Snake, em que você vai andando com a cobrinha comendo os trequinho e a cada treco que você come fica mais difícil, pois é exatamente isso o meu script, um script para se jogar snake pelo tibia! :-D

 

:style: Instalando :fun:

primeiramente gostaria de dizer que em alguns servers esse script pode dar errado, e que prometo arrumar isso na proxima versão... (sim, eu amei esse script ao ponto de fazer varias versões para ele... :*)

 

primeiro va na pasta movements do seu ot, e no movements.xml adicione:


<movevent event="StepIn" itemid="[color=Sienna][u][b]406[/b][/u][/color]" script="snake.lua" />
<movevent event="StepOut" itemid="[u][b][color=Sienna]406[/color][/b][/u]" script="snake.lua" />

 

altere o numero 406 para o ID do tile da sua arena, que deve ser unico e sem detalhes.

 

abra a pasta scripts e crie um arquivo chamado snake.lua, e cole isso nele:


--// função por Nostradamus //--
function DatabaseGetConnection()
local sqlType = getConfigInfo('sqlType')
local env, conn
if (sqlType == 'mysql') then
local db, user, pass, host, port = getConfigInfo('mysqlDatabase'), getConfigInfo('mysqlUser'), getConfigInfo('mysqlPass'), getConfigInfo('mysqlHost'), getConfigInfo('mysqlPort')
env = assert(luasql.mysql())
conn = assert(env:connect(db, user, pass, host, port))
elseif (sqlType == 'sqlite') then
env = assert(lusql.sqlite3())
conn = assert(env:connect(getConfigInfo('sqliteDatabase')))
else
error('SQL database type "'..sqlType..'" not configured.')
return false
end
return env, conn
end

--//Função por Jovial //--
function tableToList(nomes,level)
local tmp
local str = ''

for tmp = 1,#nomes do
if (str == '') then
str = nomes[tmp]..'['..level[tmp]..']'
else
str = str .. '\n'..nomes[tmp]..'['..level[tmp]..']'
end
end
return str
end

---// Snake system por Eventide //--
--// antes de tudo quero dizer que você precisara editar sua database para o script dar certo. //--

-- CONFIGURAÇÃO --
local Dmarker = 1903 --// item que vai marcar um obstaculo //--
local Smarker = 2128 --// item que vai marcar piso especial //--
local Nmarker = 4873 --// item que marca piso de 1 ponto //--
local lar = 8 --//largura da arena //--
local alt = 8 --// altura da arena //--
action = 5000 --// action id da entrada //--
--// preferencia por arena quadrada//--

local function gameStart(cid) --// the game //--
local gameArr = {validate={}, player={}, score={}, over={}, init={}, difMore={3000}}
--// fazendo borda altomaticamente //--
for altB = 1,alt do
local posiALT = {x = gameArr.init.x, y = gameArr.init.y-altB, z = gameArr.init.z}
doCreateItem(Dmarker,1,posiALT)
that = getThingFromPos(posiALT)
doSetItemActionId(that.uid,5001)
end
for larB = 1,lar do
local posiLAR = {x = gameArr.init.x, y = gameArr.init.y+larB, z = gameArr.init.z}
doCreateItem(Dmarker,1,posiLAR)
that = getThingFromPos(posiLAR)
doSetItemActionId(that.uid,5001)
end
for bor = 1,alt do
poborLAR = {x=posiALT.x+bor, y=posiALT.y, z=posiALT.z}
doCreateItem(Dmarker,1,poborLAR)
that = getThingFromPos(poborLAR)
doSetItemActionId(that.uid,5001)
end
for bord = 1,lar do
poborALT = {x=posiLAR.x, y=posiLAR.y-bord, z=posiLAR.z}
doCreateItem(Dmarker,1,poborALT)
that = getThingFromPos(poborALT)
doSetItemActionId(that.uid,5001)
end
--// diagonais //--
diagon = math.abs(lar*1.4)
possibles = {}
for unk = 1,diagon do
table.insert(possibles, unk)
end
r = math.random(1,#possibles)
rand = possibles[r]
local Inipos = {x = gameArr.init.x+rand, y = gameArr.init.x-rand, z = gameArr.init.z}
doCreateItem(Nmarker, 1, inipos)
end
--// agora o jogo sera executado //--
function onStepIn(cid, item, position, fromPosition, gameArr)
if isPlayer(cid) then
if item.actionid == action then --// actionID da entrada //--//-- você só precisara configurar este, o resto o script faz sozinho//--
if gameArr.validate ~= 1 then
Ppos = getCreaturePosition(cid)
table.insert(gameArr.over, Ppos)
Tpos = {x = Ppos.x, y = Ppos.y + 1, z = Ppos.z}
doTeleportThing(cid, Tpos)
else
gameArr.validate = 1
Ppos = getCreaturePosition(cid) --//lembrando que a entrada da arena deve se encontrar no canto inferior esquerdo //--
Tpos = {x = Ppos.x, Ppos.x - 1, z = Ppos.z}
table.insert(gameArr.init, Tpos)
gameStart(cid)
doTeleportThing(cid, Tpos)
table.insert(gameArr.player, getCreatureName(cid))
end
elseif item.actionid == 5001 then --// actionID do piso onde se pode pisar //--
local function SnakeWalk(cid)
if getPlayerLookDir(cid) == 0 then
Ppos = getCreaturePosition(cid)
Tpos = {x = Ppos.x, y = Ppos.z-1, z = Ppos.z}
doTeleportThing(cid, Tpos)
elseif getPlayerLookDir(cid) == 2 then
Ppos = getCreaturePosition(cid)
Tpos = {x = Ppos.x, Ppos.y +1, z = Ppos.z}
doTeleportThing(cid, Tpos)
elseif getPlayerLookDir(cid) == 3 then
Ppos = getCreaturePosition(cid)
Tpos = {x = Ppos.x-1, y = Ppos.y , z = Ppos.z}
else
Ppos = getCreaturePosition(cid)
Tpos = {x = Ppos.x+1, y = Ppos.y, z = Ppos.z}
end
end
addEvent(SnakeWalk,string.explode(table.concat(gameArr.difMore,"+")), cid)
elseif item.actionid == 5002 then --//actionID do piso que não pode pisar //--//obstaculo e bordas //--
GameOver = "Sinto muito, vc perdeu." --// msg que da quando o player perde //--
doTeleportThing(cid, gameArr.over)
gameArr.validate = 2
total = string.explode(table.concat(gameArr.score, "+"))
Database:getConnection()
assert(conn:execute("INSERT INTO `ranking` (`name`, `score`) VALUES ('".. getCreatureName(cid) .."', '".. total .."');"))
conn:close()
env:close()
doPlayerPopupFYI(getCreatureName(cid), GameOver)
elseif item.actionid == 5003 then --// piso de 1 ponto
table.insert(gameArr.score, 1)
npos = getThingPosition(item)
table.insert(gameArr.difMore, 200)
elseif item.actionid == 5004 then --// piso especial de 5 pontos //--//actionID 5004 //--
table.insert(gameArr.score, 5)
spos = getThingPosition(item)
table.insert(gameArr.difMore, 200)
end
end
end

function reGenerate(cid)
diagon = math.abs(lar*1.4)
possibles = {}
for unk = 1,diagon do
table.insert(possibles, unk)
end
r = math.random(1,#possibles)
rand = possibles[r]
Inipos = {x = gameArr.init.x+rand, y = gameArr.init.y+rand, z = z.gameArr.init}
doCreateItem(Nmarker, 1, inipos)
that = getThingFromPos(inipos)
setItemActionId(that.uid, 5003)
rand = math.random(1, 5)
if ran == 3 then
ra = math.random(1,2)
if ra == 2 then
posiLARD={x=posiLAR.x-1, y=posiLAR.y+1, z= posiALT.z}
doCreateItem(Smarker, 1, posiLARD)
that = getThingFrompos(posiLAR)
setItemActionId(that.uid, 5004)
else
posiALTD={x=posiALT.x+1, y=posiALT.y-1, z=posiALT.z}
doCreateItem(Smarker, 1, posiALTD)
that = getThingFrompos(posiALTD)
setItemActionId(that.uid, 5004)
end
end
end

function onStepOut(cid, item, position, fromPosition, gameArr, npos, spos)
if item.actionid == 5003 then
reGenerate(cid)
setItemActionId(npos.uid, 5001)
elseif item.actionid == 5004 then
reGenerate(cid)
setItemActionId(spos.uid, 5001)
end
end

function onSay(cid, words, param)
if isPlayer(cid) == TRUE then
DatabaseGetConnection()
topMake = assert(conn:execute("SELECT `name`,`score` FROM `ranking` ORDER BY `score` DESC LIMIT `0`, `5`;"))
geted = topMake:fetch ({}, "a")
nomes = {}
scores = {}
while geted do
table.insert(nomes, geted.name)
table.insert(score, geted.score)
geted = topMake:fetch(row, "a")
end
conn:close()
env:close()
msg = tableToList(nomes,score)
doPlayerPopupFYI(cid, msg)
end
end
--// versão 3.0 //--

 

você devera fazer uma arena quadrada, e colocar actionid 5000 em um SQM pra direita do canto inferior esquerdo.. :-D

procure nos comentários por configuração, e arrume, sendo que cada parte é explicada no comentário ao lado... :-)

(sempre leia os comentários, faz bem a saúde)

o resto o script faz sozinho..

e para ver o rank, diga !snake

 

(arrume o script de acordo com altura e largura de sua arena, para localizar onde, olhe os comentários em verde..)

 

para habilitar o rank, coloque isso no talkactions.xml:


<talkaction words="!snake" script="snake.lua" />

e copie e cole o script na pasta talkactions :-D

 

espero que gostem, pq o nord não gostou... (esse script tirou 4° lugar no concurso Y.Y )

 

 

 

 

 

Editado por Eventide

Compartilhar este post


Link para o post
Mock    32
Mock

Bom faltou algumas coisas:

padrão de postagem...

2º falta esplicar algumas coisas...

3º (nao tao importante) Screen shoot...

 

Eventide pediu pra avisar:

NAO FUNCIONA EM TFS!

 

Eventide unico pedido: Siga o padrão de postagem da proxima vez...

 

Aprovado...

Compartilhar este post


Link para o post
Eventide    7
Eventide

vou arrumar isso mock... :*

 

edit:

arrumei... :-D

Editado por Eventide

Compartilhar este post


Link para o post
ultimatearmor    0
ultimatearmor

LoL Bem inovador (inovador mesmo O.o) Gostei dhausdha agora quando eu n tiver que olhar nenhum player cum o god vo ficar brincando xD

Compartilhar este post


Link para o post
MotoBoy    0
MotoBoy

sauhsuahsaas

tenho que dar os parabens

alias..

eu vi com meus proprios olhos

o quanto vc ralou pra fazer esse script x)

parabens eventide!!! uhulll! xD

 

flws~~

Compartilhar este post


Link para o post
[ B a l i l l o ]    0
[ B a l i l l o ]

Nossa, fiquei com preguiça de ler o script. UAEHuae

Mas se funcionar, deve ser bem divertido :P

Compartilhar este post


Link para o post
123123    1
123123

Nossa os caras nao tem mais nada pra inventa mesmo!!! ahauauahuahauauahuahau...

Dahora cara, vlw por postar o script :)

Compartilhar este post


Link para o post
Mock    32
Mock

XD eu testei aki no meu server bem vc disse n funfa em tfs na hora de por coisas na db :P

 

so falto a SS fora isso ta de boa o topico (ss e opcional)

Compartilhar este post


Link para o post
PoSo    0
PoSo

Muito bom :o

Ja tem ideia para as proximas versoes?

Compartilhar este post


Link para o post
gatuxos    0
gatuxos

Como sempre Eventide sempre inventando Scripts bem legais para nós. Parabéns Eventide por esse System ^^

Compartilhar este post


Link para o post
Eventide    7
Eventide

@poso

compatibilidade! :*

 

@Mock

eu tenho preguiça de fazer SS/video

amanha eu vejo se faço! xD

Compartilhar este post


Link para o post
Laweit    0
Laweit

Nuss man, ótimo script.

Deve ter se esforçado muito! Mas eu achei inutil criar esse Rank.

 

Só pra ver quem joga Snake melhor?

 

Anyway, fico bom! Devia ter guardado para um concurso :D

Ia ganhar 1º prémio.

Compartilhar este post


Link para o post
Jonny249    0
Jonny249

@Laweit

na verdade ele USOU para um concurso...

e ganhou 4° lugar =P

@topic

Maneirão isso enventide.

Mas vc literalmente nao ensinou como instalar... vc soh nos passou o script =P

mas blz

agora eu mudei um pouco do script

pra funfar em tfs os rank:

--//Função por Jovial //--
function tableToList(nomes,level)
local tmp
local str = ''

for tmp = 1,#nomes do
if (str == '') then
str = nomes[tmp]..'['..level[tmp]..']'
else
str = str .. '\n'..nomes[tmp]..'['..level[tmp]..']'
end
end
return str
end

---// Snake system por Eventide //--
--// antes de tudo quero dizer que você precisara editar sua database para o script dar certo. //--

-- CONFIGURAÇÃO --
local Dmarker = 1903 --// item que vai marcar um obstaculo //--
local Smarker = 2128 --// item que vai marcar piso especial //--
local Nmarker = 4873 --// item que marca piso de 1 ponto //--
local lar = 8 --//largura da arena //--
local alt = 8 --// altura da arena //--
action = 5000 --// action id da entrada //--
--// preferencia por arena quadrada//--

local function gameStart(cid) --// the  game //--
local gameArr = {validate={}, player={}, score={}, over={}, init={}, difMore={3000}}
--// fazendo borda altomaticamente //--
for altB = 1,alt do
local posiALT = {x = gameArr.init.x, y = gameArr.init.y-altB, z = gameArr.init.z}
doCreateItem(Dmarker,1,posiALT)
that = getThingFromPos(posiALT)
doSetItemActionId(that.uid,5001)
end
for larB = 1,lar do
local posiLAR = {x = gameArr.init.x, y = gameArr.init.y+larB, z = gameArr.init.z}
doCreateItem(Dmarker,1,posiLAR)
that = getThingFromPos(posiLAR)
doSetItemActionId(that.uid,5001)
end
for bor = 1,alt do
poborLAR = {x=posiALT.x+bor, y=posiALT.y, z=posiALT.z}
doCreateItem(Dmarker,1,poborLAR)
that = getThingFromPos(poborLAR)
doSetItemActionId(that.uid,5001)
end
for bord = 1,lar do
poborALT = {x=posiLAR.x, y=posiLAR.y-bord, z=posiLAR.z}
doCreateItem(Dmarker,1,poborALT)
that = getThingFromPos(poborALT)
doSetItemActionId(that.uid,5001)
end
--// diagonais //--
diagon = math.abs(lar*1.4)
possibles = {}
for unk = 1,diagon do
table.insert(possibles, unk)
end
r = math.random(1,#possibles)
rand = possibles[r]
local Inipos = {x = gameArr.init.x+rand, y = gameArr.init.x-rand, z = gameArr.init.z}
doCreateItem(Nmarker, 1, inipos)
end
--// agora o jogo sera executado //--
function onStepIn(cid, item, position, fromPosition, gameArr)
----- Creditos dessa parte: Adicionado por Jonny.
dofile("./config.lua")
if sqlType == "mysql" then
   env = assert(luasql.mysql())
   con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
else
   env = assert(luasql.sqlite3())
   con = assert(env:connect(sqliteDatabase))
end
----- Fim
if isPlayer(cid) then
if item.actionid == action then --// actionID da entrada //--//-- você só precisara configurar este, o resto o script faz sozinho//--
if gameArr.validate ~= 1 then
Ppos = getCreaturePosition(cid)
table.insert(gameArr.over, Ppos)
Tpos = {x = Ppos.x, y = Ppos.y + 1, z = Ppos.z}
doTeleportThing(cid, Tpos)
else
gameArr.validate = 1
Ppos = getCreaturePosition(cid) --//lembrando que a entrada da arena deve se encontrar no canto inferior esquerdo //--
Tpos = {x = Ppos.x, Ppos.x - 1, z = Ppos.z}
table.insert(gameArr.init, Tpos)
gameStart(cid)
doTeleportThing(cid, Tpos)
table.insert(gameArr.player, getCreatureName(cid))
end
elseif item.actionid == 5001 then --// actionID do piso onde se pode pisar //--
local function SnakeWalk(cid)
if getPlayerLookDir(cid) == 0 then
Ppos = getCreaturePosition(cid)
Tpos = {x = Ppos.x, y = Ppos.z-1, z = Ppos.z}
doTeleportThing(cid, Tpos)
elseif getPlayerLookDir(cid) == 2 then
Ppos = getCreaturePosition(cid)
Tpos = {x = Ppos.x, Ppos.y +1, z = Ppos.z}
doTeleportThing(cid, Tpos)
elseif getPlayerLookDir(cid) == 3 then
Ppos = getCreaturePosition(cid)
Tpos = {x = Ppos.x-1, y = Ppos.y , z = Ppos.z}
else
Ppos = getCreaturePosition(cid)
Tpos = {x = Ppos.x+1, y = Ppos.y, z = Ppos.z}
end
end
addEvent(SnakeWalk,string.explode(table.concat(gam  eArr.difMore,"+")), cid)
elseif item.actionid == 5002 then --//actionID do piso que não pode pisar //--//obstaculo e bordas //--
GameOver = "Sinto muito, vc perdeu." --// msg que da quando o player perde //--
doTeleportThing(cid, gameArr.over)
gameArr.validate = 2
total = string.explode(table.concat(gameArr.score, "+"))
assert(conn:execute("INSERT INTO `ranking` (`name`, `score`) VALUES ('".. getCreatureName(cid) .."', '".. total .."');"))
conn:close()
env:close()
doPlayerPopupFYI(getCreatureName(cid), GameOver)
elseif item.actionid == 5003 then --// piso de 1 ponto
table.insert(gameArr.score, 1)
npos = getThingPosition(item)
table.insert(gameArr.difMore, 200)
elseif item.actionid == 5004 then --// piso especial de 5 pontos //--//actionID 5004 //--
table.insert(gameArr.score, 5)
spos = getThingPosition(item)
table.insert(gameArr.difMore, 200)
end
end
end

function reGenerate(cid)
diagon = math.abs(lar*1.4)
possibles = {}
for unk = 1,diagon do
table.insert(possibles, unk)
end
r = math.random(1,#possibles)
rand = possibles[r]
Inipos = {x = gameArr.init.x+rand, y = gameArr.init.y+rand, z = z.gameArr.init}
doCreateItem(Nmarker, 1, inipos)
that = getThingFromPos(inipos)
setItemActionId(that.uid, 5003)
rand = math.random(1, 5)
if ran == 3 then
ra = math.random(1,2)
if ra == 2 then
posiLARD={x=posiLAR.x-1, y=posiLAR.y+1, z= posiALT.z}
doCreateItem(Smarker, 1, posiLARD)
that = getThingFrompos(posiLAR)
setItemActionId(that.uid, 5004)
else
posiALTD={x=posiALT.x+1, y=posiALT.y-1, z=posiALT.z}
doCreateItem(Smarker, 1, posiALTD)
that = getThingFrompos(posiALTD)
setItemActionId(that.uid, 5004)
end
end
end

function onStepOut(cid, item, position, fromPosition, gameArr, npos, spos)
if item.actionid == 5003 then
reGenerate(cid)
setItemActionId(npos.uid, 5001)
elseif item.actionid == 5004 then
reGenerate(cid)
setItemActionId(spos.uid, 5001)
end
end

function onSay(cid, words, param)
----- Creditos dessa parte: Adicionado por Jonny.
dofile("./config.lua")
if sqlType == "mysql" then
   env = assert(luasql.mysql())
   con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
else
   env = assert(luasql.sqlite3())
   con = assert(env:connect(sqliteDatabase))
end
----- Fim
if isPlayer(cid) == TRUE then
topMake = assert(conn:execute("SELECT `name`,`score` FROM `ranking` ORDER BY `score` DESC LIMIT `0`, `5`;"))
geted = topMake:fetch ({}, "a")
nomes = {}
scores = {}
while geted do
table.insert(nomes, geted.name)
table.insert(score, geted.score)
geted = topMake:fetch(row, "a")
end
con:close()
env:close()
msg = tableToList(nomes,score)
doPlayerPopupFYI(cid, msg)
end
end
--// versão 3.0 //--

o problema era no final da função

que nao tinha o comando getConfigInfo

entao eu mudei um pouquinho

e voalá!

Ai está funfando pra tfs :P

falous

By Jonny~

Editado por Jonny249

Compartilhar este post


Link para o post
Dokmos    1
Dokmos

Eventide muito bom!

Ainda não testei seu script, mas parece estar muito legal, parabéns!!

Adorei a sua idéia do Snake Game e como me permitiu recriar sua idéia...

 

[ame]

[/ame]

 

;D

Compartilhar este post


Link para o post
PoSo    0
PoSo

eu ainda nao testei o script do Eventide, mas o do Dokmos ficou super 10 ! ;D

Parabéns pelas idéias ;D

 

edit:

gratz Post 24 Dokmos ;D

<joke>

Jogo da Cobra... Post 24.. nao sei naaao em!

</joke>

Compartilhar este post


Link para o post
Eventide    7
Eventide

o meu eu to refazendo, retirando alguns bugs e adicionando mais alguns(script sem bug não é script mwahaahahaah)

mas valeu ae Dokmos por postar pra galera sua versão

 

@jonny

to testando sua versão... vamo vê se a sua da mais certo que a minha... *.*

 

<o texto abaixo é só um pensamento, não leia>

 

 

merda, vou ter que refazer tudo pra fica melhor que o do dokmos... ;-/

 

 

Editado por Eventide

Compartilhar este post


Link para o post
raphaelpaiva    0
raphaelpaiva

parabens cara pelo script

Editado por raphaelpaiva

Compartilhar este post


Link para o post
PoSo    0
PoSo

Mas poxa, nunca teria essa ideia :o

mas com essa, vem milhares à mente =O

vo tenta faze !!

Compartilhar este post


Link para o post
zentrys    0
zentrys

Cara!! Muito boooooooooom

:D

 

Parabéns pelo bom trabalho!!

Compartilhar este post


Link para o post
Dokmos    1
Dokmos

hHHEHhhehH

Poso aquele foi o post #14 e não 24!!! Vou ficar esperto agora xD

Compartilhar este post


Link para o post
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×