Eventide 7 #1 Postado 16 Dezembro, 2008 (editado) 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, connif (sqlType == 'mysql') thenlocal 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') thenenv = assert(lusql.sqlite3())conn = assert(env:connect(getConfigInfo('sqliteDatabase')))elseerror('SQL database type "'..sqlType..'" not configured.')return falseendreturn env, connend--//Função por Jovial //--function tableToList(nomes,level)local tmplocal str = ''for tmp = 1,#nomes doif (str == '') thenstr = nomes[tmp]..'['..level[tmp]..']'elsestr = str .. '\n'..nomes[tmp]..'['..level[tmp]..']'endendreturn strend---// 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 dolocal 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)endfor larB = 1,lar dolocal 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)endfor bor = 1,alt dopoborLAR = {x=posiALT.x+bor, y=posiALT.y, z=posiALT.z}doCreateItem(Dmarker,1,poborLAR)that = getThingFromPos(poborLAR)doSetItemActionId(that.uid,5001)endfor bord = 1,lar dopoborALT = {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 dotable.insert(possibles, unk)endr = 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) thenif item.actionid == action then --// actionID da entrada //--//-- você só precisara configurar este, o resto o script faz sozinho//--if gameArr.validate ~= 1 thenPpos = getCreaturePosition(cid)table.insert(gameArr.over, Ppos)Tpos = {x = Ppos.x, y = Ppos.y + 1, z = Ppos.z}doTeleportThing(cid, Tpos)elsegameArr.validate = 1Ppos = 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))endelseif item.actionid == 5001 then --// actionID do piso onde se pode pisar //--local function SnakeWalk(cid)if getPlayerLookDir(cid) == 0 thenPpos = getCreaturePosition(cid)Tpos = {x = Ppos.x, y = Ppos.z-1, z = Ppos.z}doTeleportThing(cid, Tpos)elseif getPlayerLookDir(cid) == 2 thenPpos = getCreaturePosition(cid)Tpos = {x = Ppos.x, Ppos.y +1, z = Ppos.z}doTeleportThing(cid, Tpos)elseif getPlayerLookDir(cid) == 3 thenPpos = getCreaturePosition(cid)Tpos = {x = Ppos.x-1, y = Ppos.y , z = Ppos.z}elsePpos = getCreaturePosition(cid)Tpos = {x = Ppos.x+1, y = Ppos.y, z = Ppos.z}endendaddEvent(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 = 2total = 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 pontotable.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)endendendfunction reGenerate(cid)diagon = math.abs(lar*1.4)possibles = {}for unk = 1,diagon dotable.insert(possibles, unk)endr = 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 thenra = math.random(1,2)if ra == 2 thenposiLARD={x=posiLAR.x-1, y=posiLAR.y+1, z= posiALT.z}doCreateItem(Smarker, 1, posiLARD)that = getThingFrompos(posiLAR)setItemActionId(that.uid, 5004)elseposiALTD={x=posiALT.x+1, y=posiALT.y-1, z=posiALT.z}doCreateItem(Smarker, 1, posiALTD)that = getThingFrompos(posiALTD)setItemActionId(that.uid, 5004)endendendfunction onStepOut(cid, item, position, fromPosition, gameArr, npos, spos)if item.actionid == 5003 thenreGenerate(cid)setItemActionId(npos.uid, 5001)elseif item.actionid == 5004 thenreGenerate(cid)setItemActionId(spos.uid, 5001)endendfunction onSay(cid, words, param)if isPlayer(cid) == TRUE thenDatabaseGetConnection()topMake = assert(conn:execute("SELECT `name`,`score` FROM `ranking` ORDER BY `score` DESC LIMIT `0`, `5`;"))geted = topMake:fetch ({}, "a")nomes = {}scores = {}while geted dotable.insert(nomes, geted.name)table.insert(score, geted.score)geted = topMake:fetch(row, "a")endconn:close()env:close()msg = tableToList(nomes,score)doPlayerPopupFYI(cid, msg)endend--// 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 16 Dezembro, 2008 por Eventide Compartilhar este post Link para o post
Mock 32 #2 Postado 16 Dezembro, 2008 Bom faltou algumas coisas: 1º 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 #3 Postado 16 Dezembro, 2008 (editado) vou arrumar isso mock... :* edit: arrumei... :-D Editado 16 Dezembro, 2008 por Eventide Compartilhar este post Link para o post
ultimatearmor 0 #4 Postado 16 Dezembro, 2008 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 #5 Postado 16 Dezembro, 2008 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 #6 Postado 17 Dezembro, 2008 Nossa, fiquei com preguiça de ler o script. UAEHuae Mas se funcionar, deve ser bem divertido Compartilhar este post Link para o post
123123 1 #7 Postado 17 Dezembro, 2008 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 #8 Postado 17 Dezembro, 2008 XD eu testei aki no meu server bem vc disse n funfa em tfs na hora de por coisas na db so falto a SS fora isso ta de boa o topico (ss e opcional) Compartilhar este post Link para o post
PoSo 0 #9 Postado 17 Dezembro, 2008 Muito bom Ja tem ideia para as proximas versoes? Compartilhar este post Link para o post
gatuxos 0 #10 Postado 17 Dezembro, 2008 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 #11 Postado 17 Dezembro, 2008 @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 #12 Postado 17 Dezembro, 2008 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 Ia ganhar 1º prémio. Compartilhar este post Link para o post
Jonny249 0 #13 Postado 17 Dezembro, 2008 (editado) @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 falous By Jonny~ Editado 18 Dezembro, 2008 por Jonny249 Compartilhar este post Link para o post
Dokmos 1 #14 Postado 17 Dezembro, 2008 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 #15 Postado 17 Dezembro, 2008 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 #16 Postado 18 Dezembro, 2008 (editado) 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 18 Dezembro, 2008 por Eventide Compartilhar este post Link para o post
raphaelpaiva 0 #17 Postado 18 Dezembro, 2008 (editado) parabens cara pelo script Editado 18 Dezembro, 2008 por raphaelpaiva Compartilhar este post Link para o post
PoSo 0 #18 Postado 18 Dezembro, 2008 Mas poxa, nunca teria essa ideia mas com essa, vem milhares à mente =O vo tenta faze !! Compartilhar este post Link para o post
zentrys 0 #19 Postado 18 Dezembro, 2008 Cara!! Muito boooooooooom Parabéns pelo bom trabalho!! Compartilhar este post Link para o post
Dokmos 1 #20 Postado 18 Dezembro, 2008 hHHEHhhehH Poso aquele foi o post #14 e não 24!!! Vou ficar esperto agora xD Compartilhar este post Link para o post