Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 12/23/11 em todas áreas
-
Poketibia Erondino Site
BrunooMaciell e um outro reagiu a Gazulina por um tópico no fórum
Olá a todos do XTibia =) Bem este é o meu primeiro post, então espero que gostem e.e' Poketibia Erondino V9 Bem, vou resumir o que o jogo oferece. Pokémons : 151 Kanto , 75 Johto [ se não me engano ] , 35 Shinys. Fly System : 100% Teleport System : 100% Old Rod & Advanced Rod : [ Old Rod pesca pokemons de primeira evolução. ] [ Advanced Rod pesca pokemons de segunda evolução. ] Cassino System [ Você aposta 100dl e pode ganhar até 1.5k ] : 100% Surf System : 100% Shiny Rod 1 e 2 [ pescam tanto pokemons normais quanto shinys ] : 100% Estaca Mágica [ permite tirar pokes que vivem ne árvores. Ao clicar nela [ mesmo system fishing ] poderá vir certos pokes, como : Pokémons Voadores , lutadores , Insetos etc .. ] : 100% Ride System : 100% Novas Boxes [ Shiny box , Lendária Box , Box para LvL 30 , Coins Box ] [ Coins Box fica ao lado de onde poe a Pokeball ] : 100% Respawn de Shinys aleatorios : 100% ( E aumentando ) Itens, Hunts & Quests Novas. System Attack m1~m12 : 100% Team System : Vermelho Team and Azul Team . Pokedex : 75% ( Falta adicionar Shinys e Johtos ) Quests : Heart Stone,Shiny Rod 1 ,Shiny Rod 2, Estaca magica, Advanced Rod, Shiny box, Lendária box, Venom Stone, Pewter, Desert, Cerulean, Box lvl 30 . ~//~ ~//~ BUGS CONCERTADOS - V9 *Concertado a quest da shiny rod pois quando o time vermelho fazia ia para o templo azul. *Feito a quest da Lendaria Box. *Feito um 4 andar ne cada templo dos times. *Agora o sistema de lvl de cda andar mudou : - 1 andar -- lvl 11 - 2 andar -- lvl 30 - 3 andar -- lvl 50 - 4 andar -- lvl 75 *Acrescentado Dratini,Dragonair e Dragonite na Lendaria box. *Agora a Quest da BOX2 é localizada na ilha dos Pokémons Pássaros. *Ficou mais difícil cair stones de : - Gloom - Weepinbell - Pidgeotto - Sandslash *Concertado o bug dos chars pois dava para criar so 4 e dava bug. *Aumentado as chances de captura os Pokémons. *Concertado escada que fazia vc descer para uma parede 707,1511,9. *Concertado a entrada da quest Heart Stone. *Concertado loot dos pokes : - Caterpie - Diglett *Tirado a protection zone ao redor do lago da cidade de saffron. *Aumentado o atk do poder Leaf Storm. * Tirado a quest lvl 30 ao lado do cp de saffron e posto ela no 2 andar de cada templo. * Ao sair do pvp ira direto para a city de saffron. *Estaca Magica agora pega pokemons que dao loot,mais fortes e dao a exp certa. *Novas hunts aleatorias shinys : - 2x Arcanine - 2x Schyter - 2x farfechd - 2x grimer - 2x Kingler - 2x Muk - 2x Parasect - 2x Raticate - 2x Venomoth - 2x Zubat * Posto sistema m1 nos pokemon : - Shiny Raichu - Shiny Dratini - Shiny Electabuzz - Crystal Onix - Elder Charidard - Shiny Butterfree *Novo client feito por Gazulina *Trocado as mensagem que faz pelo server colocado mensagens que vai ajudar os players durante o jogo. * Passado as mensagem do clean para portugues. *Facilitado a quest box4 (mas ainda ta foda kkk). *Adicionado lider de ginasio : - Brock na cidade de Pewter. *Algumas quests melhoradas por Gazulina [ EU ] . *Colocado sistema de boost por npc (feito pela ekipe Pokemon Battle Frontier e principalmente a o [PBF] Thanatos ). -- Ses nao vao achar essa script em outro local essa script foi liberada para min pelo [PBF] Thanatos e eu vou dividir com vcs com a permissao dele se forem copiar favor por os creditos devidos ). - Informaçoes : - é por npc - So funciona por enquanto nos pokemon Kanto - Se localiza no 1 andar por enquanto de cada templo *Dificultado a quest da Lendaria Box. *Senha do god erondino/site. ~//~ ~//~ Download V9 : Clique aqui . Scan V8 : Clique aqui . Gente , hoje não deu para postar o Scan da V9 pois a minha internet ta muito ruim. Amanhã eu posto pra galera =) Depois eu add. umas Imagens . Créditos : Erondino : ( Pelo servidor ) Gazulina [ EU ] : Pelo POST e o client =D Equipe Pokemon Dash : Que usamos como base ~//~ ~//~ Detalhes da próxima versão : Clique aqui . Projeto TibiaGTA : Clique aqui . Outros Downloads : Clique aqui . Dúvidas ? Bugs ? Então entrem aqui e poste : Clique aqui . Erondino Site : Clique aqui .2 pontos -
Matar Player E Tirar Coração
BizaoOtServer reagiu a Killua por um tópico no fórum
Oi :XTibia_smile: faz um tempo que não posto nada aqui e eu queria postar alguma coisa, entao fiz a primeira porcariazinha que me veio em mente rs. Oque ele faz? Quando um player mata outro ele recebe um "Morgaroth's Heart" com o nome do player que matou, exemplo: O João mata a Maria, ele ganha o seguinte item: You see the Morgaroth's heart. It weighs 35.00 oz. Este foi retirado de Maria. Começando: Vá em data/creaturescripts/scripts/heartnb.lua e adicione: function onKill(cid, target, lastHitKiller) if(isPlayer(target) and isPlayer(lastHitKiller)) then doPlayerSendTextMessage(cid, 22, "Parabens, voce matou o jogador "..getCreatureName(target).." e tirou seu coraçao") function additem() local aditi = doPlayerAddItem(lastHitKiller, 5943, 1) doItemSetAttribute(aditi, "description", "Este foi retirado de "..getCreatureName(target).."") end addEvent(additem, 1000) end end Depois adicione a seguinte TAG em data/creaturescripts/creaturescripts.xml: <event type="kill" name="heartnb" event="script" value="heartnb.lua"/> Eu não testei o script pois não estou em casa e não tenho nenhum servidor para testar aqui, então pesso que testem para mim e postem resultado. @EDIT --- Para se o target for pk ganhar outro item, usem: function onKill(cid, target, lastHitKiller) if(isPlayer(target) and isPlayer(lastHitKiller)) then if getCreatureSkullType(target) == SKULL_NONE then doPlayerSendTextMessage(cid, 22, "Parabens, voce matou o jogador "..getCreatureName(target).." e tirou seu coraçao") function additem() local aditi = doPlayerAddItem(lastHitKiller, 5943, 1) doItemSetAttribute(aditi, "description", "Este foi retirado de "..getCreatureName(target).."") end addEvent(additem, 1000) end else doPlayerSendTextMessage(cid, 22, "Parabens, voce matou o jogador "..getCreatureName(target).." e tirou seu coraçao") function add2() local adoto = doPlayerAddItem(lastHitKiller, XXX, 1) doItemSetAttribute(aditi, "description", "Este foi retirado de "..getCreatureName(target).."") end addEvent(add2, 1000) end end DÚVIDAS E SUGESTÕES É SÓ POSTAR NÃO PERMITO QUE POSTEM EM OUTRO LUGAR SEM ME AVISAR1 ponto -
Eae Xtibianos Blz? Agradecerei a quem comentar o tópico. Esse Script serve para Poketibia, mais não testei em ot servers de Tibia. Vim Trazer a Vcs Uma Talkaction Bem Legal. Você está cansado de ficar indo até o corpo do pokemon para pegar o loot? Então ake está um sistema que ao invés de você ter que ir no corpo do pokemon pegar o loot, esse script pega automaticamente para você. Vamos Ao Script: Vá em Talkactions.xml adicione isso la parte dos players: Agora em Crie um Arquivo .lua e com nome de aloot.lua e coloque isso e salve dentro da pasta Talkactions: Gente desculpa, esqueci de por a parte do creaturescripts. Agr vá em creaturescripts.xml e adicione essa tag: <event type="login" name="aloot_reg" event="script" value="aloot.lua"/> <event type="kill" name="aloot_kill" event="script" value="aloot.lua"/> Agr crie um arquivo .lua e com nome de aloot.lua e coloque isso dentro e salve dentro da pasta creaturescripts/scripts. function onLogin(cid) registerCreatureEvent(cid, "aloot_kill") return true end local stor = 7575 function autoloot(cid, target, pos) local function doStack(cid, itemid, new) local count = getPlayerItemCount(cid, itemid) if (count > 100) then count = count - math.floor(count / 100) * 100 end local newCount = count + new if (count ~= 0) then local find = getPlayerItemById(cid, true, itemid, count).uid if (find > 0) then doRemoveItem(find) else newCount = new end end local item = doCreateItemEx(itemid, newCount) doPlayerAddItemEx(cid, item, true) end local function scanContainer(cid, uid, list) for k = (getContainerSize(uid) - 1), 0, -1 do local tmp = getContainerItem(uid, k) if (isInArray(list, tmp.itemid)) then if isItemStackable(tmp.itemid) and (getPlayerItemCount(cid, tmp.itemid) > 0) then doStack(cid, tmp.itemid, tmp.type) else local item = doCreateItemEx(tmp.itemid, tmp.type) doPlayerAddItemEx(cid, item, true) end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Looted ' .. tmp.type .. ' ' .. getItemNameById(tmp.itemid) .. '.') doRemoveItem(tmp.uid) elseif isContainer(tmp.uid) then scanContainer(cid, tmp.uid, list) end end end local items = {} for i = getTileInfo(pos).items, 1, -1 do pos.stackpos = i table.insert(items, getThingFromPos(pos)) end if (#items == 0) then return end local corpse = -1 for _, item in ipairs(items) do local name = getItemName(item.uid):lower() if name:find(target:lower()) then corpse = item.uid break end end if (corpse ~= -1) and isContainer(corpse) then scanContainer(cid, corpse, tostring(getPlayerStorageValue(cid, stor)):gsub('_', ''):explode(',')) end end function onKill(cid, target, lastHit) if not isPlayer(target) then local infos = getPlayerStorageValue(cid, stor) if (infos == -1) then return true end local list = tostring(infos):explode(',') if (#list == 0) then return true end addEvent(autoloot, 150, cid, getCreatureName(target), getCreaturePosition(target)) end return true end FIM... Espero que gostem ...agradecerei a quem comentar. Se o script te ajudou: Vale um REP+? Só apertar no + ali no canto da tela.Nao Vai Quebrar a Mão. VLW.1 ponto
-
[8.60] Baiak Map Edited By [Adm] Zika
DeadMaster reagiu a 2057623 por um tópico no fórum
retirado por fazer graça falando q o post era do daninhozika1 ponto -
Então pessoal arrumei punhado de bugs e visual no baiak LukinhasAcedo vamo la arrumei o tp para tibia bug >(NewMonsters) > dava em media 600k arrumei a parede da inqui antes n dava pra passa arrumei visual fica mais rox pq akele tava paia arrumei lich staff 120 de atk agr ta 20 etc.. aki ta ss Inquisition Arrumada Tp de tibia bug Arrumado Armas Adicionadas no npc Armas Adicionadas Novo visu Do templo Novo visu dos tps Vip Download aki :button_ok: Meu pc n ta entrando o site virus total eu agradeco quem fazer o scam pra mim mais pode confia :button_ok: Ei eu editei o mapa da hora vc vai abaixa n vai custa nada um rep+ ali em baixo ne :smile_positivo::thumbsupsmiley2 Quem for cria com o meu mapa passa o ip pra mim joga pq n posso deixa ele on pq tenho aulas etc.. e meu pc n suporta fica muito tempo ligado acc do god douglas/bho27i1 ponto
-
[8.60] Desert War 0.6
Zurpho reagiu a darkanderson por um tópico no fórum
Desert War 0.6 Informações: 4shared: http://www.4shared.c...ert_War_06.html Scan: http://www.virustota...7c50-1310653476 Creditos á fora: Equipe Real Global Map Equipe Illusion War Obs: Se faltar creditos, fale para eu colocar. Se for postar o otserv em outro site/forum coloque os devidos creditos de todos. Mapa de darashia Mapa feito para OPEN WAR Todos os players começam level 130 [Equipe IllusionWar] Equips de acordo com sua vocação [Equipe IllusionWar] Quest 250k - Soft boots [Equipe IllusionWar] Npc: Refinamento, Ring Seller, Recarregar Soft, Lector e Destruction Itens Duas caves para diferenciar (para chegar na cave, tem que ir andando) Sistema de slot [Mock] Frag Look [Theax] Addons por level [Pinpao] (a cada 5 em 5 leveis pega um addon novo) Anti-Mc [shawak] [Cykotitan] Buff System [Potreco] (quando player nasce no templo ja ganha um determidado buffs) Lottery System [Walef Xavier] (a cada 61 min player sorteado ganha 100k) Templo - Sistema de Buff Npcs Quest 250k e Soft Boots Treiners Cave de Walorck Cave de Dragon Lord Sistema de Refinamento Itens um pouco editados Obs: wand está com ataque muito alto, para edita é Desert War 0.6\data\weapons\scripts vai em wand.lua e edita os numeros em min/max. Download: Megaupload: http://www.megaupload.com/?d=HNUQWGKM1 ponto -
Olá a todos, venho aqui lhes trazer o script de Zombie Event. Não tenho certeza se estou postando na areá correta, mais caso eu não esteja por favor movam o tópico. Mãos a obra. Zombie Events. Testado em: TFS 0.4 Se quiser testar em outro distro responsabilidade de vocês. Algumas informações sobre ele primeiramente, Quando o evento está começando você terá certos minutos em você para incorporar o teleport antes que desapareça. Quando o teleport desaparece mesmo acontece com zombie spawn após 20 segundos. Zombie iram aparece 1 de cada vez, a cada 20 segundos. Os players que morrerem no evento, serão teleportados para o templo. O vencedor do evento, recebe algumas recompensas e um cale-se dourado com seu nome. Lembrando a areá de evento tem que ser non-pvp para que os possam disputar la. Vamos la. Globalevents/scripts/zombie event.lua local config = {playerCount = 2001, -- Global storage for counting the players left/entered in the eventzombieCount = 2002, -- Global storage for counting the zombies in the eventteleportActionId = 2000, -- Action id of the teleport needed for the movement scriptteleportPosition = {x = 1135, y = 1077, z = 3, stackpos = 1}, -- Where the teleport will be createdteleportToPosition = {x = 1190, y = 1076, z = 7}, -- Where the teleport will take youteleportId = 1387, -- Id of the teleporttimeToStartEvent = 5, -- Minutes, after these minutes the teleport will be removed and the event will be declared startedtimeBetweenSpawns = 20, -- Seconds between each spawn of zombiezombieName = "event zombie", -- Name of the zombie that should be summonedplayersNeededToStartEvent = 5, -- Players needed before the zombies can spawn.-- Should be the same as in the creaturescript!-- The zombies will spawn randomly inside this areafromPosition = {x = 1186, y = 1072, z = 7}, -- top left cornor of the playgroundtoPosition = {x = 1195, y = 1081, z = 7}, -- bottom right cornor of the playground}function onTimer()local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)doItemSetAttribute(tp, "aid", config.teleportActionId)doBroadcastMessage("Zombie event starting in " .. config.timeToStartEvent .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING)setGlobalStorageValue(config.playerCount, 0)setGlobalStorageValue(config.zombieCount, 0)addEvent(startEvent, config.timeToStartEvent * 1000 * 60)print(getGlobalStorageValue(2001))endfunction startEvent()local get = getThingfromPos(config.teleportPosition)if get.itemid == config.teleportId thendoRemoveItem(get.uid, 1)endlocal fromp, top = config.fromPosition, config.toPositionif getGlobalStorageValue(config.playerCount) >= config.playersNeededToStartEvent thenaddEvent(spawnZombie, config.timeBetweenSpawns * 1000)doBroadcastMessage("Good luck in the zombie event people! The teleport has closed!", MESSAGE_STATUS_WARNING)for x = fromp.x, top.x dofor y = fromp.y, top.y dofor z = fromp.z, top.z doareapos = {x = x, y = y, z = z, stackpos = 253}getPlayers = getThingfromPos(areapos)if isPlayer(getPlayers.uid) thendoPlayerSendTextMessage(getPlayers.uid, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. config.timeBetweenSpawns .. " seconds! Good luck!")endendendendelsedoBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. config.playersNeededToStartEvent .. " players is needed!", MESSAGE_STATUS_WARNING)for x = fromp.x, top.x dofor y = fromp.y, top.y dofor z = fromp.z, top.z doareapos = {x = x, y = y, z = z, stackpos = 253}getPlayers = getThingfromPos(areapos)if isPlayer(getPlayers.uid) thendoTeleportThing(getPlayers.uid, getTownTemplePosition(getPlayerTown(getPlayers.uid)), false)doSendMagicEffect(getPlayerPosition(getPlayers.uid), CONST_ME_TELEPORT)endendendendendendfunction spawnZombie()if getGlobalStorageValue(config.playerCount) >= 2 thenpos = {x = math.random(config.fromPosition.x, config.toPosition.x), y = math.random(config.fromPosition.y, config.toPosition.y), z = math.random(config.fromPosition.z, config.toPosition.z)}doSummonCreature(config.zombieName, pos)doSendMagicEffect(pos, CONST_ME_MORTAREA)setGlobalStorageValue(config.zombieCount, getGlobalStorageValue(config.zombieCount)+1)doBroadcastMessage("A zombie has spawned! There is currently " .. getGlobalStorageValue(config.zombieCount) .. " zombies in the zombie event!", MESSAGE_STATUS_CONSOLE_RED)addEvent(spawnZombie, config.timeBetweenSpawns * 1000)endend Movements/scripts/zombie event.lua local config = {playerCount = 2001, -- Global storage for counting the players in the eventmaxPlayers = 15, -- Max players who can participate}function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)if getGlobalStorageValue(config.playerCount) < config.maxPlayers thensetGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)+1)if getGlobalStorageValue(config.playerCount) == config.maxPlayers thendoBroadcastMessage("The Zombie event is now full [" .. getGlobalStorageValue(config.playerCount) .. " players]! The event will soon start.")elsedoBroadcastMessage(getPlayerName(cid) .. " entered the Zombie event! Currently " .. getGlobalStorageValue(config.playerCount) .. " players have joined!", MESSAGE_STATUS_CONSOLE_RED)endelseaddEvent(tpBack, 1000, cid, fromPosition)doPlayerSendCancel(cid, "The event is full. There is already " .. config.maxPlayers .. " players participating in the quest.")return falseendprint(getStorage(config.playerCount) .. " Players in the zombie event.")return trueendfunction tpBack(cid, fromPosition)doTeleportThing(cid, fromPosition, true)doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)end Creaturescripts/scripts/zombie event.lua local config = {playerCount = 2001, -- Global storage for counting the players left/entered in the eventgoblet = 5805, -- id of the gold goblet you'll get when finishing the event.rewards = {2195, 2152, 2160}, -- You will get this + a gold goblet with your name on.-- {moneyId, count, using? 1 for using moneyReward, 0 for not using.}moneyReward = {2160, 10, 1},-- Should be same as in the globalevent!-- The zombies will spawn randomly inside this areafromPosition = {x = 1186, y = 1072, z = 7}, -- top left cornor of the playgroundtoPosition = {x = 1195, y = 1081, z = 7}, -- bottom right cornor of the playground}function onStatsChange(cid, attacker, type, combat, value)if isPlayer(cid) and isMonster(attacker) thenif isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) thenif getGlobalStorageValue(config.playerCount) >= 2 thendoBroadcastMessage(getPlayerName(cid) .. " have been eated by Zombies!", MESSAGE_STATUS_CONSOLE_RED)local corpse = doCreateItem(3058, 1, getPlayerPosition(cid))doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(cid) .. ". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".")doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)setGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)-1)elseif getGlobalStorageValue(config.playerCount) == 1 thenif isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) thendoBroadcastMessage(getPlayerName(cid) .. " won the Zombie event! Congratulations!", MESSAGE_STATUS_WARNING)local goblet = doPlayerAddItem(cid, config.goblet, 1)doItemSetAttribute(goblet, "description", "Awarded to " .. getPlayerName(cid) .. " for winning the Zombie event.")local corpse = doCreateItem(3058, 1, getPlayerPosition(cid))doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(cid) .. ". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".")doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)for _,items in ipairs(config.rewards) dodoPlayerAddItem(cid, items, 1)endif config.moneyReward[3] == 1 thendoPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])endendfor x = config.fromPosition.x, config.toPosition.x dofor y = config.fromPosition.y, config.toPosition.y dofor z = config.fromPosition.z, config.toPosition.z doareapos = {x = x, y = y, z = z, stackpos = 253}getMonsters = getThingfromPos(areapos)if isMonster(getMonsters.uid) thendoRemoveCreature(getMonsters.uid)endendendendendreturn falseendendreturn trueend Creaturescripts/scripts/login.lua poste a seguinte função. registerCreatureEvent(cid, "zombieevent") Globalevents.xml insira: <globalevent name="zombieevent" time="15:00" event="script" value="zombie event.lua"/> Movements.xml insira: <movevent type="StepIn" actionid="2000" event="script" value="zombie event.lua"/> Creaturescripts.xml insira: <event type="statschange" name="zombieevent" event="script" value="zombie event.lua"/> Esta parte e de grande importância. Na pasta Monster crie um arquivo chamado Event zombie.xml e insira isto dentro: <?xml version="1.0" encoding="UTF-8"?><monster name="Event Zombie" nameDescription="an event zombie" race="undead" experience="280" speed="100" manacost="0"><health now="500" max="500"/><look type="311" corpse="9875"/><targetchange interval="5000" chance="50"/><strategy attack="100" defense="0"/><flags><flag summonable="0"/><flag attackable="0"/><flag hostile="1"/><flag illusionable="0"/><flag convinceable="0"/><flag pushable="0"/><flag canpushitems="1"/><flag canpushcreatures="1"/><flag targetdistance="1"/><flag staticattack="90"/><flag runonhealth="0"/></flags><attacks><attack name="melee" interval="2000" min="-350" max="-350"/></attacks><defenses armor="15" defense="10"/><immunities><immunity paralyze="1"/></immunities><voices interval="5000" chance="10"><voice sentence="You wont last long!"/><voice sentence="Mmmmh.. braains!"/></voices><loot><item id="2148" countmax="1" chance="100000"/><!-- gold coin --></loot></monster> Depois em monstros.xml adicione a seguinte linha: <monster name="Event zombie" file="event zombie.xml"/> Por pedidos vai ai uma pagina para seu website. Vá ate "C:/xampp/htdcos/" crie um arquivo chamado Zombieevent.php dentro coloque isso. <?PHP$main_content .= '<h4 style="" id="pt"><br><center><h2><b> Zombie Event</b></h2></center><br><br><center><object height="350" width="425"><imgsrc="http://i52.tinypic.com/wjdth1.jpg" height="700"width="525"></object></center><br><br><br> </h4><b></b><center><b>O que é o Zombie Event?</b><br><br>É um evento que acontece todos os dias as 12:00, 18:30 e 21:30 hr noservidor.<br><br><br><b>Como funciona?<br></b><br>Quando estiver na hora irá abrir um teleport no mesmo lugar onde aparece oteleport da WoE, basta você entrar e aguardar o tempo para inicio do Evento,o objetivo do jogo é correr dos zombies, a cada 20 segundos irá nascer um novo emalguma área randomica, você deve correr pois se eles te tocarem vocêautomaticamente é retirado do evento e volta para o seu temple.O ultimo jogador que sobrar vivo vence o evento.<br><br><br><b>Quais são os prêmios?<br></b><br>O ganhador irá ganhar<b> 100k</b>, uma <b>Boots of Haste</b> e um <b>Globet com onome dele</b>.<br><br></center>';?> Depois abra o index.php em "C:/xampp/htdcos/". Depois de: case "buypoints":$topic = "Buy Points";$subtopic = "buypoints";include("buypoints.php");break; Cole isso: case "zombieevent":$topic = "Zombie event";$subtopic = "zombieevent";include("zombieevent.php");break; Agora vá em "C:/xampp/htdcos/layout/tibiacom/" abra o arquivo layout.php. Depois de: <a href='?subtopic=highscores'><div id='submenu_highscores' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'><div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div><div id='ActiveSubmenuItemIcon_highscores' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div><div class='SubmenuitemLabel'>Highscores</div><div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div></div></a> Cole isso: <a href='?subtopic=zombieevent'><div id='submenu_zombieevent' class='Submenuitem'onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'><div class='LeftChain' style='background-image:url(<?PHP echo $layout_name;?>/images/general/chain.gif);'></div><div id='ActiveSubmenuItemIcon_highscores' class='ActiveSubmenuItemIcon'style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div><div class='SubmenuitemLabel'>Zombie Event</div><div class='RightChain' style='background-image:url(<?PHP echo $layout_name;?>/images/general/chain.gif);'></div></div></a> Agora clique aqui e confira seu zombie events. Aqui vocês podem baixar o mapa para se usar com este evento: Download: Click aqui Scan: Clique aqui Prontinho espero que gostem. Créditos: Gostou? REP+ Arrumado Monster. Site Adicionado.1 ponto
-
Editado Por Motivos Pessoais!1 ponto
-
Pack De Pokemons Shiny [Em Formato .idc]
devildgs reagiu a BruninhooAngel por um tópico no fórum
Olá Novamente Galera, Estou aqui em meu 2º Post no Xtibia para postar mais uma exclusividade que acabei de fazer, é o: PACK DE POKEMONS SHINYS que eu criei para maior inovaçao nos servidores de poketibia [pokemon online] Logo Abaixo Colocarei Um Tutorial De Como Colocar As Sprites Em Seu Client De Pokemon :smile_positivo: Screenshots No Final Do Topico Obs: Links De Download No Final Do Tópico Tutorial: O Pack Contém: Nova Pokedex ; Shiny Venusaur ; Shiny Starmie ; Shiny Pinsir ; Shiny Chancey ; Shiny Licktung ; Shiny Snorlax ; Shiny Tentacruel ; e Shiny Nidoking ! Screenshot Dos Pokémons [Obs: eu tirei a SS deles no dat editor no jogo e totalmente melhor e mais inovador :smile_positivo: [Obs: Os pokemons com fly ; ride ; surf ; etc... 80% dos meus posts com eles vai vir junto a sprite dele no fly ; ride ; surf ; seja o que for [Nesse topico mesmo o venusaur shiny tem o ride, starmie e tentacruel surf, etc...] ] OBS: Se estiver em area errada me desculpe, como disse no começo do topico esse é meu 2º topico no Xtibia e nao tenho muita noçao das areas :neutral: #Agora O Mais Importante, Os Downloads: Dat Editor: Clique Aqui! Pack De Shiny Sprites: Clique Aqui! Scan Pack De Shinys: Clique Aqui! Te Ajudei? Gostou Do Tópico? Clique No "+" Verdinho Ali Em Baixo :button_ok: Meu Fã? Use:1 ponto -
[FECHADO] The Baiak Server 9.10 (New Mount System + Cooldown 100%) By (History)
Greguidiou reagiu a sugai por um tópico no fórum
Distro: The Forgotten Server 0.2.11 (Mystic Spirit) (9.10) Patch Level 1: Patch Level 2: (Créditos: Talaturen Kornholijo Elf Fallen Desenvolvedores OpenTibia (acidgame, jiddo, mips_act, nfries88, otserv_simone, primer13r, remere, shivoc, smygflik, snack, tliffrag e wrzasq)). Baiak Server 1.0 by History: - Novos outfits - Novas montarias - Conta GOD: 2/history (Atenção: Não pode soltar magias com o GOD, porque da Debug no server). Download:Mega upload ScanVirustotal Para editar o mapa use o RME 8.6 Imagens: City: Demon Helmet Quest: Montarias: Próxima edição (Baiak Server 9.10 Versão 1.1): Créditos: GOD Bon Vilden Baiak Lula Felipete Docao TFS Team Tryller The Crystal Server Team History H3R01 ponto -
Palavra com o Administrador da Hard: Caros Companheiros, No Lançamento dos Scripts de Natal Fizemos Sucesso. Claro que Tivemos que Abrir um Bau e Libera-lo para o Universo do Tibia, Este Mês Lançamos os Scripts de Verão e queremos BATER o Recorde de Visualizações. Temos 2 MISSOES, BATER O RECORD de VISUALIZAÇÕES E COMENTARIOS: [bater] 9 Respostas Recorde Batido [ ? ]. [bater]322 visualizações Recorde Batido [ ? ]. Alem Disso Agradeço aos VISITANTES do Xtibia que Visualizaram nossa Pagina. Acesso Rapido: Quer conhecer Outros Conteudos da HARD? 1- Praia? [Tibia] Scripts De Verao No Xtibia - Hard Corporation Tags: Praia, Deusa do Mar,Pacote Summer, Marinheiro, Montaria Maritima,Bar do Eks, Barril de Rum. 116 visualizações. 2 - [Tibia] Scripts De Natal No Xtibia - Hard Corporation Tags: Presentes de Natal, Enfeites, Carta, Duende Askasleikir,Montaria Natalina, Tarefas de Natal, Toca Natalina (Gorro), Esquilo da Neve, Fireworksrocket. 446 visualizações. 3 - [Tibia] System Zumbi - Hard Corporation Tag: Funcionamento 100% | 1230 visualizações. --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- VERÃO é NO XTIBIA - 6 Anos de Tibia. Versao: 8.6 No Inicio dos Seculos, a Muito Tempo atras Existia um Guerreiro THOR este Guerreiro Gostava Muito de Nadar no Verão, por isso Viajava para Biflost, uma Ponte magica la Nadava mais rapido que todos. Praia Biflost Para Criar a Praia é Facil, nao Necessita de Script pois o Client Ja Oferece. Utilize os Seguintes Items: - 4823 - Fara o Player Andar Sobre a Agua. os Tiles Acima Farao o Players Mudar seu Estado. Agua/Addon No Fim Coloque a Borda Para o Player Nao Passar. (Tiles ID abaixo) LEMBRE-SE DE COLOCAR AREA PROTECT NA PRAIA, para Ninguem Matar o "Amigo". ## SALVE E FECHE. (MapEditor).. Pausa para Descanço.. Deusa do MAR Funçao: Npc com Tarefas Summers. / Voce Precisa Ajudar a Salvar as Estrelas do Mar. Premios/Recompensas: 1 Flower wreath 90000 Experiencia Item Usado como Procura/Quantidade: 5 Orange star 7 Orange star 10 Orange star 15 Orange star 25 Orange star *Voce pode Adicionar como Loot de Monsters ou Colocar em quests. Entre nos Aquivos: OTserver/Data/NPC CRIE O ARQUIVO Deusa do Mar.XML : ## SALVE E FECHE. Entre nos Aquivos: OTserver/Data/NPC/SCRIPTS CRIE O ARQUIVO Deusa do Mar.lua : ## SALVE E FECHE. **Caso Queira Deixar o Item Raro/Especial Pode Adicionar o Letreiro abaixo, Isso Significa que o Player que tiver o item 9927 Participou das Tarefas. Entre nos Aquivos: OTserver/Data/Items ABRA O ARQUIVO Items.XML e Substitua o que esta Dentro do ID 9927 por Este: ## SALVE E FECHE. Pausa para Descanço.. Pacote Summer Funçao: No Mes Passado Tivemos uma Ideia, porque nao Criar 1 Item Pacote ou Seja Vende-lo a Preço Justo um pouco mas caro, Neste Pacote Incluiremos 5 Itens juntos. *Voce podera Colocar Seus Pacotes em Ofertas ou Vender como Desejar. ESTE PACOTE ESTARA A VENDA NO NPC MARINHEIRO. Entre nos Aquivos: OTserver/Data/Actions ABRA O ARQUIVO Actions.XML E ADICIONE: ## SALVE E FECHE. Entre nos Aquivos: OTserver/Data/Actions/SCRIPTS/other CRIE O ARQUIVO Pacote de Flores.lua E ADICIONE: ## SALVE E FECHE. Pausa para Descanço.. The Book Macabre [Creditos: Hard] Como Estamos de Ferias, que tal Ler um bom Livro? Voce Podera Escrever uma Historia em um Livro. Vamos Publica-lo? Nome: Heavily bound book - Livro fortemente Fechado. Descriçao: The macabre tales of the tibia. - As lendas Macabras do tibia. weight - Peso 7800 CAP* writeable-Gravável SIM (1) maxTextLen-Max Texto Letras 1512** * Voce Pode Diminuir o Peso, Dependendo da EXP de seu server, pois 7800 CAP seria para level 150+ algumas Vocations. ** o Numero de Letras possiveis para se escrever pode ser modificado Almentando, para ter mas espaço para as historias. o LIVRO PODE SER EDITADO 1 VEZ Apenas.(Cada) Pausa para Descanço.. Montaria Maritima [Creditos: Desconhecido] Acredita que ela Foi descoberta? Nem nosso Historiador conseguiu Localizar esta Rapida Montaria. Funçao: Montaria Em que o Player Usara Mana e Ganhara Speed por um Certo Tempo. Entre nos Aquivos: OTserver/Data/Actions ABRA O ARQUIVO Actions.XML E ADICIONE: ## SALVE E FECHE. Parecido com este Monster: 7184 Montaria Entre nos Aquivos: OTserver/Data/Actions/Scripts CRIE O ARQUIVO MOUNTSUMMER.LUA E ADICIONE: ## SALVE E FECHE. Pausa para Descanço.. Fazendo Rum[bloqueado] Voce pode encontra-lo neste Tutorial Aqui. Creditos a seus devidos Difundores. Pausa para Descanço.. MARINHEIRO [bloqueado] O Script do Npc Marinheiro foi Cancelado no Momento. PEDIMOS DESCULPAS.. Pausa para Descanço.. Fique Atento para os Dias Previstos para a Liberaçao de Nossos Scripts. Lembrando que estes podem sofrer Alteraçao de Data.1 ponto
-
Editores Aqui! Vejam
Guinhoololzin reagiu a keroserfelizz por um tópico no fórum
http://imageshack.us...7/65396931.jpg/ Ola GAlera,eu vim trazer Tres editores otimos o Pic editor , monster editorE o dat editor Pic editor http://9f500e22.linkbucks.com Monster editor http://9adc6237.linkbucks.com Scan Do Monster editor https://www.virustotal.com/file/abc96a2570b4fb50d1b72bb33c17fcd520fa8c075aa214611f5f954e9a618e87/analysis/1326927798/ Dat editor http://6c3645c5.linkbucks.com Se gostarem dem rep Ai Galera num custa nada. Um abraço1 ponto -
Explicação: Foi feito um pedido através msn para que fizesse um comando que mandassem jogadores para suas houses,claro que tem tempo para usar o comando. gohome.lua function onSay(cid, words, param) local config = { Time = 30, -- a cada quantos minutos voltará a usar OnlyPremium = true, -- se somente jogadores premium poderão usar. pz = true, -- players precisam estar em protection zone para usar? (true or false) Storage = 43535 -- n mexa } if config.OnlyPremium == true and not isPremium(cid) then return doPlayerSendCancel(cid,"Somente jogadores Premium podem usar este comando.") elseif config.pz == true and getTilePzInfo(getCreaturePosition(cid)) == FALSE then return doPlayerSendCancel(cid,"você precisa estar em protection zone pra poder teleportar.") elseif not getHouseByPlayerGUID(getPlayerGUID(cid)) then return doPlayerSendCancel(cid,"Você não possui uma Casa.") elseif getPlayerStorageValue(cid, config.Storage) >= os.time() then minutos = math.floor((getPlayerStorageValue(cid,config.Storage) - os.time())/(60)) return doPlayerSendCancel(cid, "Você deve esperar ".. (minutos < 0 and 0 or minutos) .." minutos para voltar a usar o comando.") end doTeleportThing(cid, getHouseEntry(getHouseByPlayerGUID(getPlayerGUID(cid)))) setPlayerStorageValue(cid, config.Storage, os.time()+config.Time*60) return TRUE end <talkaction words="!home" event="script" value="gohome.lua"/>1 ponto
-
o negocio é nunca desistir . sempre terão os nukers infelizmente =/1 ponto
-
Pelo amor de Deus, que script bem embaralhado sahuda Ta aew resolvido:1 ponto
-
The Forgotten Server Rev3884
PedrinnZikah reagiu a 2057623 por um tópico no fórum
cara nao pode ter sido eu mais eu catei o ot e arrumei eu ja tinha esse ot no meu pc mais qunado eu catei o ot nao tinha nenhum credits1 ponto -
vlw roxor eu vo fazer isso na proxima eu melhoro masi vlw por comentar1 ponto
-
Bom galera, eu sei que existem vários efeitos que já vem nos ots 8.54 acima. Mas este script, eu fiz exclusivamente para ots 8.4 que se você for pegar o script de um 8.54 e passar para o 8.4, não funcionará! Este script serve para 8.4 e inclusive para "TODAS" as versões, eu acho, pois só testei em 8.30 pra cima! Vamos ao script!!! Vá em data/creaturescripts/scripts, copie e cole um arquivo.lua e renomeie-o para efeitoup, e dentro cole: Agora muitos já sabem o que fazer né? Vá em data/creaturescripts/creaturescripts.xml e em alguma linha isto: E, assim... Não terminamos ainda o script!!! Vá em data/creaturescripts/scripts e abra login.lua, em alguma linha ou lugar cole: E para quem tem o login.lua em uma linha só, cole do lado de algum outro script, mas com o [] do lado! Obrigado! Quem gostou, gostou, quem não gostou, faze o que né? Mesmo assim, agradeço a sua colaboração!1 ponto
-
Tranformando Qualquer Colar Em Aol
miccolisbest reagiu a Menoxcide por um tópico no fórum
TA AKE: <item id="2196" article="a" name="amulet of never-ending loss"> <attribute key="weight" value="420"/> <attribute key="slotType" value="necklace"/> <attribute key="charges" value="1"/> <attribute key="preventDrop" value="1"/> <attribute key="absorbPercentFire" value="5"/> Se quiser mudar o item é só troca o id1 ponto -
Editores Aqui! Vejam
keroserfelizz reagiu a AandersonC por um tópico no fórum
Bah Cara Vlw. Tava Precisando Mto Disso1 ponto -
[Fechado] Só Topico Sobre Skyrim Aqui
DaNDaNrOxX reagiu a Saymon14 por um tópico no fórum
pc n roda e fica dando xilique ai1 ponto -
axei esse do jeito que vc ker... creditos no final do post cria 1 arquivo .lua e poe iso dentro w = { [1] = {ef = 36, sh = 3, dmg = COMBAT_FIREDAMAGE}, [2] = {ef = 42, sh = 28, dmg = COMBAT_ICEDAMAGE}, [3] = {ef = 47, sh = 38, dmg = COMBAT_POISONDAMAGE}, [4] = {ef = 17, sh = 31, dmg = COMBAT_DEATHDAMAGE}, [5] = {ef = 11, sh = 35, dmg = COMBAT_ENERGYDAMAGE}, [6] = {ef = 36, sh = 31, dmg = COMBAT_PHYSICALDAMAGE}, [7] = {ef = 49, sh = 37, dmg = COMBAT_HOLYDAMAGE} } function onUseWeapon(cid, var) min, max = 300, 300 -- dano minimo e maximo target = getCreatureTarget(cid) if target ~= 0 then wx = w[math.random(1, #w)] doSendDistanceShoot(getThingPos(cid), getThingPos(target), wx.sh) addEvent(doAreaCombatHealth, 100, cid, wx.dmg, getThingPos(target), 0, -min, -max, wx.ef) end return true end agr só adicionar o script da wand em weapons vc sabe fazer né? poe esa tag em weapons.xml e em itens.xml Creditos : Soldoran,Miler. e eu por procurar Te ajudei? rep+ :]1 ponto
-
[Monster] Mudando Outift /~Rep+
schibuola reagiu a lucasquevedobr por um tópico no fórum
Fiz aqui e testei, está funcionando... qualquer duvida fala cmg <?xml version="1.0" encoding="UTF-8"?> <monster name="Outfit" nameDescription="outfit" race="undead" experience="18000" speed="0" manacost="0"> <health now="10000" max="10000"/> <look type="57" corpse="0"/> <targetchange interval="5000" chance="10"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="0"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <defenses armor="30" defense="30"> <defense name="outfit" interval="1500" chance="10" monster="Dragon Lord" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Frost Dragon" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Demon" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Medusa" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Hellhound" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Hydra" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Dragon" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Serpent Spawn" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Grim Reaper" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="behemoth" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Wyrm" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Defiler" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Hellfire Fighter" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Warlock" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="outfit" interval="1500" chance="10" monster="Juggernaut" duration="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> </defenses> <elements> <element icePercent="25"/> <element firePercent="25"/> <element earthPercent="25"/> <element energyPercent="25"/> </elements> <immunities> <immunity holy="0"/> <immunity earth="0"/> <immunity physical="0"/> <immunity fire="0"/> <immunity death="0"/> <immunity invisible="1"/> </immunities> <loot> </loot> </monster>1 ponto -
[Ajuda] Bugs No Meu Ot
sorcyeth reagiu a uarisneiper por um tópico no fórum
Isso nao sao bugs, voce so nao programou eles '-' Moves: vai em data/talkactions/scripts/m1.lua e coloca isso aqui dentro m11 ponto -
Baixe uma Versão mais atualizada do SQLite editor Ajudei? +REP1 ponto
-
va no actions/scripts e crie um arquivo com nome VIPNAME.LUA dentro dele coloque esse codigo: function onUse(cid, item, fromPosition, itemEx, toPosition) if item.uid == 35400 then queststatus = getPlayerStorageValue(cid,35400) if queststatus == -1 or queststatus == 0 then doCreatureSay(cid, "VOcê recebeu seu beneficio por ser vip!", TALKTYPE_ORANGE_1) db.executeQuery("UPDATE `players` SET `name` = '[Vip] "..getCreatureName(cid).."' WHERE `id` = "..getPlayerGUID(cid)..";") doPlayerSendTextMessage(cid,25,"Você será kickado em 5 segundos para mudança de nome.") doPlayerAddAddons(cid, 1) addEvent(doRemoveCreature, 5*1000, cid, true) setPlayerStorageValue(cid, 35400, 1) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYDAMAGE) else doPlayerSendTextMessage(cid,22,"você ja tem o [vip] no nome.") end return true end end e no actions.xml coloque essa tag <action actionid="35400" event="script" value="vipname.lua"/> agora para terminar vá no seu map editor e crie um chest ou alavanca com action 35400 e Unique 35400. Fonte:Subwat/xtibia REP ++?1 ponto
-
Programação.lua ( Super Teórico, Muita Leitura )
PostadorHunter reagiu a XJhoow por um tópico no fórum
Olá XTibianos. Eu lí boa parte desse conteúdo, é realmente, muito bom, cansativo.. mas você pode salvar no favorito e ler um tópico por dia.. assim melhora.. Terá DOUBLE, TRIPLE.. POST, por que é muito grande, caso esteja a infringir as regras, me avisem! Fonte: Site lua O que é Lua? Lua é uma linguagem de programação poderosa, rápida e leve, projetada para estender aplicações. Lua combina sintaxe simples para programação procedural com poderosas construções para descrição de dados baseadas em tabelas associativas e semântica extensível. Lua é tipada dinamicamente, é interpretada a partir de bytecodes para uma máquina virtual baseada em registradores, e tem gerenciamento automático de memória com coleta de lixo incremental. Essas características fazem de Lua uma linguagem ideal para configuração, automação (scripting) e prototipagem rápida. Por que escolher Lua? Lua é uma linguagem estabelecida e robusta Lua é usada em muitas aplicações industriais (e.g., Adobe's Photoshop Lightroom), com ênfase em sistemas embutidos (e.g., o middleware Ginga para TV digital) e jogos (e.g., World of Warcraft). Lua é atualmente a linguagem de script mais usada em jogos. Lua tem um sólido manual de referência e existem vários livros sobre a linguagem. Várias versões de Lua foram lançadas e usadas em aplicações reais desde a sua criação em 1993. Lua é rápida Lua tem uma merecida reputação de ótimo desempenho. Outras linguagens de script aspiram ser "tão rápidas quanto Lua". Vários benchmarks mostram Lua como a linguagem mais rápida dentre as linguagens de script interpretadas. Lua é rápida não só em programas específicos para benchmarks, mas no dia-a-dia também. Porções substanciais de aplicações grandes são escritas em Lua. Lua é portátil Lua é distribuída via um pequeno pacote e compila sem modificações em todas as plataformas que têm um compilador ANSI/ISO C. Lua roda em todos os tipos de Unix e Windows, e também em dispositivos móveis (como computadores de mão e celulares que usam BREW, Symbian, Pocket PC, etc.) e em microprocessadores embutidos (como ARM e Rabbit) para aplicações como Lego MindStorms. Lua é embutível Lua é uma engine rápida e pequena que você pode facilmente embutir na sua aplicação. Lua tem uma API simples e bem documentada que permite uma integração forte com código escrito em outras linguagens. É simples estender Lua com bibliotecas escritas em outras linguagens. Também é simples estender programas escritos em outras linguagens com Lua. Lua é usada para estender programas escritos não só em C e C++, mas também em Java, C#, Smalltalk, Fortran, Ada, Erlang, e mesmo outras linguagens de script, como Perl and Ruby. Lua é poderosa (e simples) Um conceito fundamental no projeto de Lua é fornecer meta-mecanismos para a implementação de construções, em vez de fornecer uma multidão de construções diretamente na linguagem. Por exemplo, embora Lua não seja uma linguagem puramente orientada a objetos, ela fornece meta-mecanismos para a implementação de classes e herança. Os meta-mecanismos de Lua trazem uma economia de conceitos e mantêm a linguagem pequena, ao mesmo tempo que permitem que a semântica seja estendida de maneiras não convencionais. Lua é pequena Incluir Lua numa aplicação não aumenta quase nada o seu tamanho. O pacote de Lua 5.1.4, contendo o código fonte, documentação e exemplos, ocupa 212K comprimido e 860K descompactado. O fonte contém cerca de 17000 linhas de C. No Linux, o interpretador Lua contendo todas as bibliotecas padrões de Lua ocupa 153K e a biblioteca Lua ocupa 203K. Lua é livre Lua é software livre de código aberto, distribuída sob uma licença muito liberal (a conhecida licença MIT). Lua pode ser usada para quaisquer propósitos, incluindo propósitos comerciais, sem qualquer custo ou burocracia. Basta fazer um download e usá-la. Lua tem importância global O projeto e a evolução de Lua foram apresentados em junho de 2007 na HOPL III, a 3a Conferência da ACM sobre a História das Linguagens de Programação. Essa conferência ocorre a cada 15 anos (a primeira foi em 1978 e a segunda em 1993) e somente poucas linguagens são apresentadas a cada vez. A escolha de Lua para a HOPL III é um importante reconhecimento do seu impacto mundial. Lua é a única linguagem de programação de impacto desenvolvida fora do primeiro mundo, estando atualmente entre as 20 linguagens mais populares na Internet (segundo o índice TIOBE). Quais as origens de Lua? Lua é inteiramente projetada, implementada e desenvolvida no Brasil, por uma equipe na PUC-Rio (Pontifícia Universidade Católica do Rio de Janeiro). Lua nasceu e cresceu no Tecgraf, o Grupo de Tecnologia em Computação Gráfica da PUC-Rio. Atualmente, Lua é desenvolvida no laboratório Lablua. Tanto o Tecgraf quanto Lablua são laboratórios do Departamento de Informática da PUC-Rio. Eu peço que não postem aqui, que aqui eu quero ir postando curiosidades, e coisas que acho sobre a programação lua. Acho legal, porque acho também que tem bastante gente que quer programar .lua não é mesmo? Criarei um post, em lugar possível, algum lugar do fórum e posteriormente, criarei meu próprio fórum para a discussão do mesmo. Introdução Lua é uma linguagem de programação de extensão projetada para dar suporte à programação procedimental em geral e que oferece facilidades para a descrição de dados. A linguagem também oferece um bom suporte para programação orientada a objetos, programação funcional e programação orientada a dados. Lua foi planejada para ser utilizada por qualquer aplicação que necessite de uma linguagem de script leve e poderosa. Lua é implementada como uma biblioteca, escrita em C limpo (isto é, no subconjunto comum de ANSI C e C++). Por ser uma linguagem de extensão, Lua não possui a noção de um programa principal: ela somente funciona embarcada em um programa cliente anfitrião, chamado de programa hospedeiro ou simplesmente de hospedeiro. Esse programa hospedeiro pode invocar funções para executar um pedaço de código Lua, pode escrever e ler variáveis Lua e pode registrar funções C para serem chamadas pelo código Lua. Através do uso de funções C, Lua pode ser estendida para lidar de maneira apropriada com uma ampla variedade de domínios, permitindo assim a criação de linguagems de programação personalizadas que compartilham um arcabouço sintático. A distribuição Lua inclui um exemplo de um programa hospedeiro chamado lua, o qual usa a biblioteca de Lua para oferecer um interpretador de linha de comando Lua completo. Lua é um software livre e, como de praxe, é fornecido sem garantias, conforme dito na sua licença. A implementação descrita neste manual está disponível no sítio web oficial de Lua, www.lua.org. Como qualquer outro manual de referência, este documento é árido em algumas partes. Para uma discussão das decisões por trás do projeto de Lua, veja os artigos técnicos disponíveis no sítio web oficial de Lua. Para uma introdução detalhada à programação em Lua, veja o livro de Roberto Ierusalimschy, Programming in Lua (Segunda Edição). A Linguagem Esta seção descreve os aspectos léxicos, sintáticos e semânticos de Lua. Em outras palavras, esta seção descreve quais itens léxicos são válidos, como eles são combinados, e qual o significado da sua combinação. As construções da linguagem serão explicadas usando a notação BNF estendida usual, na qual {a} significa 0 ou mais a's e [a] significa um a opcional. Não-terminais são mostrados como non-terminal, palavras-chave são mostradas como kword e outros símbolos terminais são mostrados como `=´. Convenções Léxicas Em Lua, Nomes (também chamados de identificadores) podem ser qualquer cadeia de letras, dígitos, e sublinhados que não começam com um dígito. Esta definição está de acordo com a definição de nomes na maioria das linguagens. (A definição de letras depende de qual é o idioma (locale): qualquer caractere considerado alfabético pelo idioma corrente pode ser usado como um identificador.) Identificadores são usados para nomear variáveis e campos de tabelas. As seguintes palavras-chave são reservadas e não podem ser utilizadas como nomes: and break do else elseif end false for function if in local nil not or repeat return then true until while Lua é uma linguagem que diferencia minúsculas de maiúsculas: and é uma palavra reservada, mas And e AND são dois nomes válidos diferentes. Como convenção, nomes que começam com um sublinhado seguido por letras maiúsculas (tais como _VERSION) são reservados para variáveis globais internas usadas por Lua. As seguintes cadeias denotam outros itens léxicos: + - * / % ^ # == ~= <= >= < > = ( ) { } [ ] ; : , . .. ... Cadeias de caracteres literais podem ser delimitadas através do uso de aspas simples ou aspas duplas, e podem conter as seguintes seqüências de escape no estilo de C: '\a' (campainha), '\b' (backspace), '\f' (alimentação de formulário), '\n' (quebra de linha), '\r' (retorno de carro), '\t' (tabulação horizontal), '\v' (tabulação vertical), '\\' (barra invertida), '\"' (citação [aspa dupla]) e '\'' (apóstrofo [aspa simples]). Além disso, uma barra invertida seguida por uma quebra de linha real resulta em uma quebra de linha na cadeia de caracteres. Um caractere em uma cadeia de caracteres também pode ser especificado pelo seu valor numérico usando a seqüência de escape \ddd, onde ddd é uma seqüência de até três dígitos decimais. (Note que se um caractere numérico representado como um seqüência de escape for seguido por um dígito, a seqüência de escape deve possuir exatamente três dígitos.) Cadeias de caracteres em Lua podem conter qualquer valor de 8 bits, incluindo zeros dentro delas, os quais podem ser especificados como '\0'. Cadeias literais longas também podem ser definidas usando um formato longo delimitado por colchetes longos. Definimos uma abertura de colchete longo de nível n como um abre colchete seguido por n sinais de igual seguido por outro abre colchete. Dessa forma, uma abertura de colchete longo de nível 0 é escrita como [[, uma abertura de colchete longo de nível 1 é escrita como [=[ e assim por diante. Um fechamento de colchete longo é definido de maneira similar; por exemplo, um fechamento de colchete longo de nível 4 é escrito como ]====]. Uma cadeia de caracteres longa começa com uma abertura de colchete longo de qualquer nível e termina no primeiro fechamento de colchete longo do mesmo nível. Literais expressos desta forma podem se estender por várias linhas, não interpretam nenhuma seqüência de escape e ignoram colchetes longos de qualquer outro nível. Estes literais podem conter qualquer coisa, exceto um fechamento de colchete longo de nível igual ao da abertura. Por conveniência, quando uma abertura de colchete longo é imediatamente seguida por uma quebra de linha, a quebra de linha não é incluída na cadeia de caracteres. Como exemplo, em um sistema usando ASCII (no qual 'a' é codificado como 97, quebra de linha é codificado como 10 e '1' é codificado como 49), as cinco cadeias literais abaixo denotam a mesma cadeia: a = 'alo\n123"' a = "alo\n123\"" a = '\97lo\10\04923"' a = [[alo 123"]] a = [==[ alo 123"]==] Uma constante numérica pode ser escrita com uma parte decimal opcional e com um expoente decimal opcional. Lua também aceita constantes hexadecimais inteiras, através do uso do prefixo 0x. Exemplos de constantes numéricas válidas são: 3 3.0 3.1416 314.16e-2 0.31416E1 0xff 0x56 Um comentário começa com um hífen duplo (--) em qualquer lugar, desde que fora de uma cadeia de caracteres. Se o texto imediatamente depois de -- não é uma abertura de colchete longo, o comentário é um comentário curto, o qual se estende até o fim da linha. Caso contrário, ele é um comentário longo, que se estende até o fechamento de colchete longo correspondente. Comentários longos são freqüentemente usados para desabilitar código temporariamente. Valores e Tipos Lua é uma linguagem dinamicamente tipada. Isto significa que variáveis não possuem tipos; somente valores possuem tipos. Não existe definição de tipos na linguagem. Todos os valores carregam o seu próprio tipo. Todos os valores em Lua são valores de primeira classe. Isto significa que todos os valores podem ser armazenados em variáveis, passados como argumentos para outras funções e retornados como resultados. Existem oito tipos básicos em Lua: nil, boolean, number, string, function, userdata, thread e table. Nil é o tipo do valor nil, cuja propriedade principal é ser diferente de qualquer outro valor; ele geralmente representa a ausência de um valor útil. Boolean é o tipo dos valores false e true. Tanto nil como false tornam uma condição falsa; qualquer outro valor torna a condição verdadeira. Number representa números reais (ponto flutuante de precisão dupla). (É fácil construir interpretadores Lua que usem outra representação interna para números, tais como precisão simples de ponto flutuante ou inteiros longos; veja o arquivo luaconf.h.) O tipo string representa cadeias de caracteres. Em Lua, cadeias de caracteres podem conter qualquer caractere de 8 bits, incluindo zeros ('\0') dentro dela. Lua pode chamar (e manipular) funções escritas em Lua e funções escritas em C (ver §2.5.8). O tipo userdata permite que dados C arbitrários possam ser armazenados em variáveis Lua. Este tipo corresponde a um bloco de memória e não tem operações pré-definidas em Lua, exceto atribuição e teste de identidade. Contudo, através do uso de metatables, o programador pode definir operações para valores userdata (ver §2.8). Valores userdata não podem ser criados ou modificados em Lua, somente através da API C. Isto garante a integridade dos dados que pertencem ao programa hospedeiro. O tipo thread representa fluxos de execução independentes e é usado para implementar co-rotinas (ver §2.11). Não confunda o tipo thread de Lua com processos leves do sistema operacional. Lua dá suporte a co-rotinas em todos os sistemas, até mesmo naqueles que não dão suporte a processos leves. O tipo table implementa arrays associativos, isto é, arrays que podem ser indexados não apenas por números, mas por qualquer valor (exceto nil). Tabelas podem ser heterogêneas; isto é, elas podem conter valores de todos os tipos (exceto nil). Tabelas são o único mecanismo de estruturação de dados em Lua; elas podem ser usadas para representar arrays comuns, tabelas de símbolos, conjuntos, registros, grafos, árvores, etc. Para representar registros, Lua usa o nome do campo como um índice. A linguagem dá suporte a esta representação oferecendo a.name como um açúcar sintático para a["name"]. Existem várias maneiras convenientes de se criar tabelas em Lua . Da mesma forma que os índices, o valor de um campo da tabela pode possuir qualquer tipo (exceto nil). Em particular, dado que funções são valores de primeira classe, campos de tabela podem conter funções. Portanto, tabelas podem também possuir metódos . Valores do tipo table, function, thread e userdata (completo) são objetos: variáveis não contêm realmente estes valores, somente referências para eles. Atribuição, passagem de parâmetro, e retorno de funções sempre lidam com referências para tais valores; estas operações não implicam em qualquer espécie de cópia. A função type retorna uma cadeia de caracteres descrevendo o tipo de um dado valor. Coerção Lua provê conversão automática entre valores do tipo string e do tipo number em tempo de execução. Qualquer operação aritmética aplicada a uma cadeia de caracteres tenta converter esta cadeia para um número, seguindo as regras de conversão usuais. De forma análoga, sempre que um número é usado onde uma cadeia de caracteres é esperada, o número é convertido para uma cadeia, em um formato razoável. Para um controle completo sobre como números são convertidos para cadeias, use a função format da biblioteca string. Variáveis Variáveis são lugares usados para armazenar valores. Existem três tipos de variáveis em Lua: variáveis globais, variáveis locais e campos de tabelas. Um nome simples pode denotar uma variável global ou uma variávei local (ou um parâmetro formal de uma função, que é um caso particular de variável local): var = Nome Assume-se que toda variável é uma variável global a menos que ela seja explicitamente declarada como uma variável local . Variáveis locais possuem escopo léxico: variáveis locais podem ser livremente acessadas por funções definidas dentro do seu escopo . Antes da variável receber a sua primeira atribuição, o seu valor é nil. Colchetes são usados para indexar uma tabela: var = expprefixo `[´ exp `]´ A semântica de acessos a variáveis globais e a campos de tabelas pode ser mudada através do uso de metatabelas. Um acesso a uma variável indexada t[i] é equivalente a uma chamada gettable_event(t,i). A sintaxe var.Nome é apenas um açúcar sintático para var["Nome"]: var = expprefixo `.´ Nome Todas as variáveis globais são mantidas como campos em tabelas Lua comuns, chamadas de tabelas de ambiente ou simplesmente de ambientes (ver §2.9). Cada função tem sua própria referência para um ambiente, de forma que todas as variáveis globais dentro de uma função irão se referir para esta tabela de ambiente. Quando uma função é criada, ela herda o ambiente da função que a criou. Para obter a tabela de ambiente de uma função Lua, você deve chamar getfenv. Para trocar a tabela de ambiente, você deve chamar setfenv. (A única maneira de tratar o ambiente de funções C é através da a biblioteca de depuração; Um acesso a uma variável global x é equivalente a _env.x , que por sua vez é equivalente a gettable_event(_env, "x") onde _env é o ambiente da função corrente. Comandos Lua oferece um conjunto quase convencional de comandos, similar ao conjunto de comandos disponíveis em Pascal ou C. Este conjunto inclui atribuições, estruturas de controle, chamadas de funções e declarações de variáveis. Trechos A unidade de execução de Lua é denominada de trecho. Um trecho é simplesmente uma seqüência de comandos, os quais são executados sequencialmente. Cada comando pode opcionalmente ser seguido por um ponto-e-vírgula: trecho = {comando [`;´]} Não existem comandos vazios e portanto a construção ';;' não é válida. Lua trata um trecho como o corpo de uma função anônima com um número variável de argumentos. Um trecho pode ser armazenado em um arquivo ou em uma cadeia de caracteres dentro do programa hospedeiro. Para executar um trecho, Lua primeiro pré-compila o trecho em instruções para uma máquina virtual e depois executa o código compilado com um interpretador para a máquina virtual. Trechos também podem ser pré-compilados em uma forma binária; veja o programa luac para mais detalhes. Programas na forma de código fonte e na forma de um arquivo fonte já compilado são intercambiáveis; Lua automaticamente determina qual é o tipo do arquivo e age em conformidade com ele. Blocos Um bloco é uma lista de comandos; sintaticamente, um bloco é a mesma coisa que um trecho: bloco = trecho Um bloco pode ser explicitamente delimitado para produzir um único comando: comando = do bloco end Blocos explícitos são úteis para controlar o escopo de declarações de variáveis. Blocos explícitos são também usados às vezes para adicionar um comando return ou break no meio de outro bloco . Atribuição Lua permite atribuições múltiplas. Em virtude disto, a sintaxe para atribuição define uma lista de variáveis no lado esquerdo e uma lista de expressões no lado direito. Os elementos em ambos os lados são separados por vírgulas: comando = listavar `=´ listaexp listavar = var {`,´ var} listaexp = exp {`,´ exp} Antes da atribuição ser realizada, a lista de valores é ajustada para o comprimento da lista de variáveis. Se há mais valores do que o necessário, os valores em excesso são descartados. Se há menos valores do que o necessário, a lista é estendida com tantos nil's quantos sejam necessários. Se a lista de expressões termina com uma chamada de função, então todos os valores retornados por esta chamada entram na lista de valores, antes do ajuste ser realizado. Um comando de atribuição primeiro avalia todas as suas expressões e somente depois é que a atribuição é realizada. Desta forma, o código i = 3 i, a[i] = i+1, 20 atribui 20 a a[3], sem afetar a[4] porque o i em a é avaliado (para 3) antes de receber o valor 4. De modo similar, a linha x, y = y, x troca os valores de x e y e x, y, z = y, z, x permuta de maneira cíclica os valores de x, y e z. A semântica de atribuições para variáveis globais e campos de tabelas pode ser mudada através do uso de metatabelas. Uma atribuição para uma variável indexada t[i] = val é equivalente a settable_event(t,i,val) . Uma atribuição a uma variável global x = val é equivalente à atribuição _env.x = val, que por sua vez é equivalente a settable_event(_env, "x", val) onde _env é o ambiente da função sendo executada. (A variável _env não é definida em Lua. Ela foi usada aqui somente para fins didáticos.) Estruturas de Controle As estruturas de controle if, while e repeat possuem o significado usual e a sintaxe familiar: comando = while exp do bloco end comando = repeat bloco until exp comando = if exp then bloco {elseif exp then bloco} [else bloco] end Lua também possui um comando for, o qual possui duas variações . A expressão da condição de uma estrutura de controle pode retornar qualquer valor. Tanto false como nil são considerados um valor falso. Todos os valores diferentes de nil e false são considerados como verdadeiros (em particular, o número 0 e a cadeia de caracteres vazia também são considerados valores verdadeiros). No laço repeat–until, o bloco mais interno não termina na palavra-chave until, mas somente depois da condição. Desta forma, a condição pode referenciar variáveis locais declaradas dentro do bloco do laço. O comando return é usado para retornar valores de uma função ou de um trecho (que nada mais é do que uma função). Funções e trechos podem retornar mais de um valor, de modo que a sintaxe para o comando return é comando = return [listaexp] O comando break é usado para terminar a execução de um laço while, repeat ou for, pulando para o próximo comando depois do laço: comando = break Um break termina a execução do laço mais interno. Os comandos return e break somente podem ser escritos como o último comando de um bloco. Se é realmente necessário ter um return ou break no meio de um bloco, então um bloco interno explícito pode ser usado, como nas expressões idiomáticas do return end e do break end, pois agora tanto o return como o break são os últimos comandos em seus respectivos blocos (internos). Comando for O comando for possui duas variações: uma numérica e outra genérica. O laço for numérico repete um bloco de código enquanto uma variável de controle varia de acordo com uma progressão aritmética. Ele possui a seguinte sintaxe: comando = for nome `=´ exp `,´ exp [`,´ exp] do bloco end O bloco é repetido para nome começando com o valor da primeira exp, até que ele passe o valor da segunda exp através de seguidos passos, sendo que a cada passo o valor da terceira exp é somado a nome. De forma mais precisa, um comando for como for v = e1, e2, e3 do bloco end é equivalente ao código: do local var, limite, passo = tonumber(e1), tonumber(e2), tonumber(e3) if not (var and limite and passo) then error() end while (passo > 0 and var <= limite) or (passo <= 0 and var >= limite) do local v = var bloco var = var + passo end end Note o seguinte: * Todas as três expressões de controle são avaliadas um única vez, antes do laço começar. Elas devem obrigatoriamente produzir números. * var, limite e passo são variáveis invisíveis. Os nomes foram utilizados aqui somente para fins didáticos. * Se a terceira expressão (o passo) está ausente, então um passo de tamanho 1 é usado. * É possível usar break para sair de um laço for. * A variável de laço v é local ao laço; não é possível usar o valor desta variável após o fim do for ou depois do for ter sido interrompido pelo uso de um break. Se você precisa do valor desta variável, atribua-o a outra variável antes de interromper ou sair do laço. O comando for genérico funciona utilizando funções, chamadas de iteradoras. A cada iteração, a função iteradora é chamada para produzir um novo valor, parando quando este novo valor é nil. O laço for genérico possui a seguinte sintaxe: comando = for listadenomes in listaexp do bloco end listadenomes = Nome {`,´ Nome} Um comando for como for var_1, ···, var_n in explist do block end é equivalente ao código: do local f, s, var = explist while true do local var_1, ···, var_n = f(s, var) var = var_1 if var == nil then break end block end end Note o seguinte: * explist é avaliada somente uma vez. Os seus resultados são uma função iteradora, um estado e um valor inicial para a primeira variável iteradora. * f, s e var são variáveis invisíveis. Os nomes foram utilizados aqui somente para fins didáticos. * É possível usar break para sair de um laço for. * As variáveis de laço var_i são locais ao laço; não é possível usar os valores delas após o término do for. Se você precisa destes valores, você deve atribuí-los a outras variáveis antes de interromper o laço ou sair do mesmo. Chamadas de Função como Comandos Para permitir possíveis efeitos colaterais, funções podem ser executadas como comandos: comando = chamadadefuncao Neste caso, todos os valores retornados pela função são descartados.. Declarações Locais Variáveis locais podem ser declaradas em qualquer lugar dentro de um bloco. A declaração pode incluir uma atribuição inicial: comando = local listadenomes [`=´ listaexp] Caso ocorra uma atribuição inicial, a sua semântica é a mesma de uma atribuição múltipla (ver §2.4.3). Caso contrário, todas as variáveis são inicializadas com nil. Um trecho também é um bloco e portanto variáveis locais podem ser declaradas em um trecho fora de qualquer bloco explícito. O escopo de uma variável declarada desta forma se estende até o fim do trecho. Expressões As expressões básicas em Lua são as seguintes: exp = expprefixo exp = nil | false | true exp = Numero exp = Cadeia exp = funcao exp = construtortabela exp = `...´ exp = exp opbin exp exp = opunaria exp expprefixo = var | chamadadefuncao | `(´ exp `)´ Operadores binários compreendem operadores aritméticos , operadores relacionais , operadores lógicos e o operador de concatenação . Operadores unários compreendem o menos unário , o not unário e o operador de comprimento unário . Tanto chamadas de funções como expressões vararg podem resultar em múltiplos valores. Se uma expressão é usada como um comando (o que somente é possível para chamadas de funções , então a sua lista de retorno é ajustada para zero elementos, descartando portanto todos os valores retornados. Se uma expressão é usada como o último (ou o único) elemento de uma lista de expressões, então nenhum ajuste é feito (a menos que a chamada seja delimitada por parênteses). Em todos os demais contextos, Lua ajusta a lista de resultados para um elemento, descartando todos os valores exceto o primeiro. Aqui estão alguns exemplos: f() -- ajusta para 0 resultados g(f(), x) -- f() é ajustado para 1 resultado g(x, f()) -- g recebe x mais todos os resultados de f() a,b,c = f(), x -- f() é ajustado para 1 resultado (c recebe nil) a,b = ... -- a recebe o primeiro parâmetro da lista vararg, -- b recebe o segundo (tanto a como b podem receber nil caso não -- exista um parâmetro correspondente na lista) a,b,c = x, f() -- f() é ajustado para 2 resultados a,b,c = f() -- f() é ajustado para 3 resultados return f() -- retorna todos os resultados de f() return ... -- retorna todos os resultados recebidos da lista vararg return x,y,f() -- retorna x, y e todos os resultados de f() {f()} -- cria uma lista com todos os resultados de f() {...} -- cria uma lista com todos os parâmetros da lista vararg {f(), nil} -- f() é ajustado para 1 resultado Qualquer expressão delimitada por parênteses sempre resulta em um único valor. Dessa forma, (f(x,y,z)) é sempre um único valor, mesmo que f retorne múltiplos valores. (O valor de (f(x,y,z)) é o primeiro valor retornado por f, ou nil se f não retorna nenhum valor.) Operadores Aritméticos Lua provê os operadores aritméticos usuais: os operadores binários + (adição), - (subtração), * (multiplicação), / (divisão), % (módulo) e ^ (exponenciação); e o operador unário - (negação). Se os operandos são números ou cadeias de caracteres que podem ser convertidas para números (ver §2.2.1), então todas as operações possuem o seu significado usual. A exponenciação funciona para qualquer expoente. Por exemplo, x^(-0.5) calcula o inverso da raiz quadrada de x. Módulo é definido como a % b == a - math.floor(a/b)*b Ou seja, é o resto de uma divisão arredondada em direção a menos infinito. Operadores Relacionais Os operadores relacionais em Lua são == ~= < > <= >= Estes operadores sempre possuem como resultado false ou true. A igualdade (==) primeiro compara o tipo de seus operandos. Se os tipos são diferentes, então o resultado é false. Caso contrário, os valores dos operandos são comparados. Números e cadeias de caracteres são comparados de maneira usual. Objetos (valores do tipo table, userdata, thread e function) são comparados por referência: dois objetos são considerados iguais somente se eles são o mesmo objeto. Toda vez que um novo objeto é criado (um valor com tipo table, userdata, thread ou function) este novo objeto é diferente de qualquer outro objeto que existia anteriormente. É possível mudar a maneira como Lua compara os tipos table e userdata através do uso do metamétodo "eq" . As regras de conversão não se aplicam a comparações de igualdade. Portanto, "0"==0 é avaliado como false e t[0] e t["0"] denotam posições diferentes em uma tabela. O operador ~= é exatamente a negação da igualdade (==). Os operadores de ordem trabalham da seguinte forma. Se ambos os argumentos são números, então eles são comparados como tais. Caso contrário, se ambos os argumentos são cadeias de caracteres, então seus valores são comparados de acordo com a escolha de idioma atual. Caso contrário, Lua tenta chamar o metamétodo "lt" ou o metamétodo "le" . Uma comparação a > b é traduzida para b < a, ao passo que a >= b é traduzida para b <= a. Operadores Lógicos Os operadores lógicos em Lua são and, or e not. Assim como as estruturas de controle, todos os operadores lógicos consideram false e nil como falso e qualquer coisa diferente como verdadeiro. O operador de negação not sempre retorna false ou true. O operador de conjunção and retorna seu primeiro argumento se este valor é false ou nil; caso contrário, and retorna seu segundo argumento. O operador de disjunção or retorna seu primeiro argumento se o valor deste é diferente de nil e de false; caso contrário, or retorna o seu segundo argumento. Tanto and como or usam avaliação de curto-circuito; isto é, o segundo operando é avaliado somente quando é necessário. Aqui estão alguns exemplos: 10 or 20 --> 10 10 or error() --> 10 nil or "a" --> "a" nil and 10 --> nil false and error() --> false false and nil --> false false or nil --> nil 10 and 20 --> 20 (Neste manual, --> indica o resultado da expressão precedente.) Concatenação O operador de concatenação de cadeias de caracteres em Lua é denotado por dois pontos ('..'). Se ambos os operandos são cadeias de caracteres ou números, então eles são convertidos para cadeias de caracteres de acordo com as regras. Caso contrário, o metamétodo "concat" é chamado. Construtores de Tabelas Construtores de tabelas são expressões que criam tabelas. Toda vez que um construtor é avaliado, uma nova tabela é criada. Um construtor pode ser usado para criar uma tabelas vazia ou para criar uma tabela e inicializar alguns dos seus campos. A sintaxe geral de construtores é construtortabela = `{´ [listadecampos] `}´ listadecampos = campo {separadordecampos campo} [separadordecampos] campo = `[´ exp `]´ `=´ exp | Nome `=´ exp | exp separadordecampos = `,´ | `;´ Cada campo da forma [exp1] = exp2 adiciona à nova tabela uma entrada cuja chave é exp1 e cujo valor é exp2. Um campo da forma Nome = exp é equivalente a ["Nome"] = exp. Finalmente, campos da forma exp são equivalentes a = exp, onde i representa números inteiros consecutivos, iniciando com 1. Campos nos outros formatos não afetam esta contagem. Por exemplo, a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 } é equivalente a do local t = {} t[f(1)] = g t[1] = "x" -- primeira exp t[2] = "y" -- segunda exp t.x = 1 -- t["x"] = 1 t[3] = f(x) -- terceira exp t[30] = 23 t[4] = 45 -- quarta exp a = t end Se o último campo na lista possui a forma exp e a expressão é uma chamada de função ou uma expressão com um número variável de argumentos, então todos os valores retornados pela expressão entram na lista consecutivamente. Para evitar isto, coloque parênteses ao redor da chamada de função ou da expressão com número variável de argumentos. A lista de campos pode ter um separador a mais no fim, como uma conveniência para código gerado automaticamente. Se gostarem eu continuo , relembrando, tudo tirado do lua.org! Só tive o empenho de formatar!1 ponto -
[Oficial] Refugia (8.60) 26/08/2012 0.0.8
Jeffersoonf reagiu a farkall por um tópico no fórum
SEU BOSTA DO CARALHO ! VIADINHO _!_ :button_cancel:1 ponto -
De nada (: PS: pra dar REP+ clique em (:1 ponto
-
[Fechado] Só Topico Sobre Skyrim Aqui
DaNDaNrOxX reagiu a DevilMoon por um tópico no fórum
porque nao criam um topico fixo dessa merda bando de filha da puta, ta enchendo o saco isso já! só pa fude mesmo né?-1 pontos -
O Que Eu Axo Da Equipe
DaNDaNrOxX reagiu a jamersonandres por um tópico no fórum
a ta blz a b c foda-se SPAM REMOVIDO-1 pontos -
-1 pontos