Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 01/06/13 em todas áreas
-
Sign Monsters, Inc Nível: Ini Medium/High PREVIEW TUTORIAL Passo 1 Monte seu BG com as cores #122256; #c1d671 e #3a4330 Passo 2 Selecione a ferramenta Pincel, configure como na imagem abaixo E aplique nas laterais Cor #0e1a2b no azul e #5b684e no verde escuro Passo 3 Selecione a ferramenta Smudge Tool (Borrar), vá em Janela > Predefinições de Pincel > Pincel Procure pelo Sample Tip Brush, de 23 px e configure da seguinte forma: Passo 4 Aplique o smudge por toda sua sign, até ficar mais ou menos assim: Passo 5 Posicione sua render em sua sign Passo 6 Duplique sua render (CTRL + J) e aplique o smudge na render com as mesmas configurações do passo 3, como na imagem abaixo: Passo 7 Crie uma nova camada (SHIFT + CTRL + N) e escureça a parte azul da sign com um brush preto (Opacidade 20%), e clareie o lado direito da sign com brush branco (Opacidade 50%) Passo 8 Aplique C4D e Brush na sign para dar mais efeitos Passo 9 Aplique um tratamento na imagem, uma borda e a tipografia ENCERRANDO... É isso, espero que tenham gostado, desculpem-me a qualidade da imagem do passo 9, fiquei com pregui de mexer no ps hahaha Qualquer duvida só postar aqui =)4 pontos
-
[Conjunto] Anyur + Brund
AtomicOt e um outro reagiu a Gabriel Couto por um tópico no fórum
Autor: Anyur Eu e o Brund vamos disponibilizar um show off de mapas nossos, feitos por nós dois (juntos ou separados), para proporcionar a vocês um show off legal =) Att, Anyur.2 pontos -
Recentemente, vi que alguns usuários estavam em dúvida de como renderizar uma imagem de forma correta, então resolvi elaborar um tutorial para resolver essa dúvida. • A imagem foi feita em alta resolução e em .png, mas, por algum motivo o IMGUR reduz a qualidade de imagens grandes e as converte para .jpg O tutorial é simples, prático e rápido, qualquer dúvida deve ser postada nesse mesmo tópico! Espero que gostem! Abraços!2 pontos
-
2 pontos
-
"In game tudo fica legal"2 pontos
-
Ajuda Em mágia de sumon
Yan Oliveira e um outro reagiu a brun123 por uma questão
é porque o monstro Azerus não tem a flag convinceable no seu xml, tente assim: function onCastSpell(cid, var) if not doSummonMonster(cid, "Azerus") then doPlayerSendCancel(cid, "Not enough space to summon.") return false end local summon = getCreatureSummons(cid) summon = summon[#summon] doCreatureSay(cid, "Utevo", TALKTYPE_ORANGE_1) doSendMagicEffect(getThingPos(summon), CONST_ME_TELEPORT) addEvent(function() if isCreature(summon) then doRemoveCreature(summon) end end, removeTime * 1000) return true end se não funcionar, você usa a sua script mesmo, só que abre o xml do seu monstro e procure por: <flag convinceable="0"/> e troca por 1 o valor2 pontos -
Skymagnum, newText nunca vai ser um número, na verificação isNumber já ia dar false e ia sempre falar que só números são permitidos... você tem que passar ele pra número usando tonumber ou envolvendo em parênteses, mas é melhor usar tonumber, pois se não for possível transformar em número, retorna nil. também cometeu o mesmo erro que o tony, está mudando diretamente a skill de fist para o valor inserido na caixa, em vez de aumentar a skill. Tá aqui tony, veja se esse jeito te agrada: function doPlayerSetSkill(pid, skill, amount) local player = getPlayerByGUID(pid) if isCreature(player) then doRemoveCreature(player, true) end db.executeQuery("UPDATE `player_skills` SET `value` = ".. amount .." WHERE `player_id` = ".. pid .. " and `skillid` = ".. skill ..";") return true end function doPlayerSetMagic(pid, amount) local player = getPlayerByGUID(pid) if isCreature(player) then doRemoveCreature(player, true) end db.executeQuery("UPDATE `players` SET `maglevel` = " .. amount .. " WHERE `id` = "..pid) return true end function onTextEdit(cid, item, newText) local skillTable = { --[id do item] = id da skill, [1949] = SKILL_FIST, } local maxSkills = 100 local skillId = skillTable[item.itemid] if not skillId then return true end local value = tonumber(newText) if not value or value < 0 then doPlayerSendCancel(cid, "Por favor, insira um número válido.") return false end local guid = getPlayerGUID(cid) local points = getPlayerMagLevel(cid) local skill = getPlayerSkillLevel(cid, skillId) if points < value then doPlayerSendCancel(cid, "Você não tem points suficientes.") return false end if skill >= maxSkills then doPlayerSendCancel(cid, "Sua skill já está no máximo.") return false end local newValue = math.min(skill + value, maxSkills) doPlayerSetSkill(guid, skillId, newValue) doPlayerSetMag(guid, points - newValue + skill) return false end2 pontos
-
[Pokemon] PDA By Slicer Pokemon dash advanced editado por slicer, vários bugs retidos. Projeto encerrado! Espero que todos tenham gostado desse 1 ano de trabalho duro! Todas as atualizações: * Leiam e sigam as instruções do Change Log dentro da pasta do patch! Downlaods: PDA By Slicer With Level System v2.9 Full -> http://www.mediafire...z2afuu75zblvmvq PDA By Slicer Without Level System v1.9 Full -> http://www.mediafire...td0l0ip9ajprrbf OTClient editado 2.8/1.8 => http://www.mediafire...1lcbs1fktpm676w Atualizações: EH OBRIGATORIO O USO DESSE CLIENT ABAIXO E USEM O .PIC TB!!!!!!!!! Client v1.9/2.9 => http://www.mediafire...77i414v1hy187fj Patch v1.9 => http://www.mediafire...da4umj3ip18jrf1 Patch v2.9 => http://www.mediafire...7nt275td9afl1fy Patch v1.9.1 => http://www.mediafire.com/?i3flwa3lrd016zl Patch v2.9.1 => http://www.mediafire.com/?m4zhjgn62uow1sp Obs: Atualizaçoes mais antigas estao dentro do spoiler acima!! OTAL.DLL: OBS: caso n esteja aparecendo a barra de moves no client normal do tibia, baixem essa .dll e coloquem na pasta onde fica o Pokemon_nibe.exe ... Otal.rar Patch Correçao! Todos olhem! Bugs na nova atualizaçao? Olhe o spoiler e veja se arruma o problema! Atualizado: 08/02/13 Créditos: Otal.rar1 ponto
-
Olá galeres, maais um sistema pra vocês aqui. E novidade, dessa vez eu não usei MOD O que é: Um sistema em que o GOD cria uma pergunta com a resposta que quiser e os players devem respondê-la. Quem acerta, ganha 1 ponto, que posteriormente poderá ser trocado por quiz bags, que dão prêmios aleatórios ou simplesmente podem rasgar se você tiver azar. Scripts: Configurando: Imagens: Observações: • Não há bugs até o momento • Testado apenas em TFS 0.3.6 Créditos: LuckOake -- Pelo sistema em geral Vodkart -- Por arrumar a talkaction Demonbholder -- Por ajudar com o NPC Just this, obrigado.1 ponto
-
Perfect Reset System 1.0
curruwilliam reagiu a LuckOake por um tópico no fórum
Olá galera. Esses dias um amigo meu veio me pedir ajuda com o sistema de resets do server dele, que tava bugando toda hora e travando tudo. Ele me mandou o tópico do sistema de reset que ele usava, um tal de Advanced Reset System 2.0. Olhei o código com calma e vi que tinha umas coisas interessantes como stages, mas o script era uma redação de tão grande e tava lotado de coisa inútil e que poderia ser removida sem problemas. Resultado, fiquei incomodado com o tamanho do negócio e a quantidade de coisas sem sentido, então fiz um próprio que está sem bugs e que é três vezes menor que o outro e possui suporte à contagem de resets via database ou storage (obs: sei que storage também faz parte da database, mas você me entendeu). O que é: Oras, é um sistema de reset, como já diz o nome. Ele reseta seu personagem para o level que você escolher. Bônus: Como já dito, o script tem suporte à contagem de resets via database ou storage, ficando a seu critério escolher, e junto dele vem um pequeno script para o GOD poder adicionar resets em um character. Script (reset.lua): Tag (talkactions.xml): <talkaction words="!reset;/addresets" script="reset.lua"/> OBS: Lembre-se de colocar o nome do o arquivo.lua como reset.lua. Configurando: Para usar o sistema, use os seguintes comandos: !reset -- Para resetar /addresets nome,quantidade -- Para o GOD adicionar resets em um character Observações: Créditos: LuckOake -- Pelo script Obrigado.1 ponto -
»Yourots Revival« » Esse projeto é fruto de um trabalho em conjunto entre os mappers AundSoul e Beto06, revivendo um antigo mapa, dando a ele uma nova forma, o famoso Yourots. Não seguimos totalmente sua forma original, mas preservamos os antigos locais de caça. Alteramos de modo que o mapa esteja limpo e jogável sem perder a velha base do yourots. » Nesse showoff, as imagens postadas serão de ambos os mappers, podendo ser frequentemente atualizadas nas páginas seguintes.Comentários e críticas são sempe bem vindos, nunca esqueça que sua opinão é muito importante para nós. ~*~ Cidade: (Beto06) Acompanhe nossas atualizações e comente!1 ponto
-
High Rate Ot - Phoenix
IsseiHyoudou reagiu a W0lfer por um tópico no fórum
Phoenix 8.60 Bom, todos os dias eu olho a lista e só vejo Global e Baiak. Por isso, resolvi postar esse OTServer inovador High Rate. Para começar, esse OT faz parte de um projeto "serissimo" que tinha como objetivo um Servidor High Rate com Donates, ou seja, sério! O servidor está "pronto-para-rodar" e ser um grande sucesso! O Servidor - Sistemas: Todos os sistemas abaixo são ÚNICOS e não foram retirados da internet, tudo faz parte do projeto. Castle Donate: Castelo de Hunts para doadores. Pet System: EXCLUSIVO! É necessário 10kk para obter o item que captura o Pet (16 tipos de Pets) VIP System: Área VIP completa, própria e adaptada para as rates Phoenix. Exclusive Rebirth Hunts: Hunts que é necessário certa quantidade de Resets para entrar. Rebirth System: Sistema de Resetar (Level 712717) Click and Buy: Sistema de comprar Items com apenas um clique em cima do item desejado. Training System: EXCLUSIVO! Há 2 tipos: Voce pode escolher treinar em um Monk ou apenas pisando em um tile. e outros... Hunts - Hunts: Todas elas são exclusivas e possuem um método proprio de entrada pelo trem. - Todos os monstros são exclusivos e adaptados para a Exp. Eventos - Cassino, Zombie, Tetris, Bomberman, Arena X1, Arena X Todos Items VIP - Comprados diretamente pelo jogo atravez de de Donate Coins que podem ser vendidos pelo Shop. Fotos Sala de Items VIP Área de Trainer por Tile Sala de Hunts exclusivas para Resets Templo Área VIP Download Scan Créditos: Zatacka1 ponto -
Aulas Básicas Com O Sr. Iunix: 3# Variáveis e Tipos de dados.
Tava sem ideia reagiu a iunix por um tópico no fórum
Olá abiguinhos, venho aqui mais uma vez dar uma aula para meus grandes amigos ♥. Variáveis O que são variáveis? Para o que elas servem? Como usa-las? Quais os tipos de variáveis? O que são variáveis? Vamos imaginar variáveis como um lugar onde você pode armazenar qualquer valor e mudar isso quando quiser. Isso é o conceito básico de variáveis. Mas para o que isso serve? Suponhamos que você precise pegar o level do player: getPlayerLevel(cid) várias vezes no código. E para evitar isso, você gostaria de ter uma maneira mais simples e eficaz de salvar esse level. Para isso servem as variáveis. Como usa-las? Vamos continuar o exemplo a cima. if getPlayerLevel(cid) < 65 then print("O player tem o level menor que 65") elseif getPlayerLevel(cid) == 65 then print("O Player tem level 65") elseif getPlayerLevel(cid) > 65 then print("O player tem level menor que 65") end Isso seria um código sem variáveis. Podem ver que eu usei várias vezes a função "getPlayerLevel(cid)". Vamos tentar fazer usando variáveis. local level = getPlayerLevel(cid) if level < 65 then print("O player tem o level menor que 65") elseif level == 65 then print("O Player tem level 65") elseif level > 65 then print("O player tem level maior que 65") end Viram como ficou um pouco mais simples? Ok, agora vamos entender o que eu fiz. Toda vez que você for criar uma variável, você tem que declarar o valor dela. Mas como fazer isso? Simples, faça isso: local var = value Onde var seria o nome da variável e value o valor da variável. Mas dai você me pergunta: "O que é esse local?". Já chego lá amigo, aguente um pouco xD Porem o nome das variáveis tem algumas regras: 1º - As seguintes palavras não podem ser utilizadas: and break do else elseif end false for function if in local nil not or repeat return then true until while 2º - Não se pode começar um nome com um numero. exemplo: 1variavel = valor (Mas pode conter números) 3º - Não podem conter esses símbolos: + - * / % ^ # == ~= <= >= < > = ( ) { } [ ] ; : , . .. ... Quais valores elas podem conter? (Tipos de Dados) Existem alguns "tipos" de valóres que elas podem conter: String = Texto Number = Numero Bool = True/False Function = Funções (Sim, pode conter funções) Tables = Sim, podem conter tabelas. Userdata = Ponteiros em C (Não iremos usar isso) Thread = Escopo de processamento (Não iremos usar isso também) Nil = Valor nulo, sem valor ou vazio. Mas e aquele "local", o que significa? Bom, esse local significa que a variável é local desse arquivo. Isso é um tanto quanto irrelevante em otserver, já que ele não consegue pegar variáveis de outros scripts (Só em libs, que se você declarar uma variável como local em alguma lib, ela não será lida em outros códigos). Finalizações Bom, qualquer duvida ou sugestão. Postar abaixo. E se lembrarem de algo que eu esqueci, me avisem (Estou fazendo isso as 8 da manhã e estou sem dormir, meio obvio que deixarei algo passar.1 ponto -
New Baiak Yurots 8.60 Sem Bugs, Novas Caves E Quest By:[God] Willz
RoXoR reagiu a Willzinhoaz por um tópico no fórum
ORIGINAL DO BAIAK, o resto é editado por mim. =] Baiak Yurots V2.2 Oque Mudou ? Mudou a City ta 90% 8.5 Foi Arrumada As Houses. Adicioano Npc Papai Noel no Templo Vende Items 8.54! Novos Items Novos Outifits Novas Hunts E Muito Mais... Baiak Yurots V2.7 Oque Mudou ? Foi Adicionada um Nova Cidade Chamada Baiak City Foi Adidionada Um Teleport no Templo Que Vai para Alumas City's Foi Adicionado Npc de Bless,Pagando Todas as Bless você nao prescisa usar aol... Foi Adicionado Uma Ilha de GM's ... Bug do Account Mananger Arrumado. Novo Executer adicionado,se o ot cai ele salva sozinhoo. E Muito Mas Estara por vim ... Baiak Yurots v1.0.9 Oque Mudou ? Foi Adicionado Sistema Vip.. Foi Adicionado 5 Novos Portais Vip Foi Adicionado Novos Bixos Vip,Warlock Vip,Medusa Vip,Bossing of Baiak.. Foi Adicionado New Quest Baiak Super Foda !! ;D Foi Modificado o Templo Foi Adicionado Mais Treiners ! Entre Alguns Bugs Retirados Baiak Yurots v1.1.0 Oque Mudou ? Mudou o Protocolo de 8.57 para 8.60 Novos Item Novo Outfit Baiak Yurots V1.1.4 Oque Mudou ? Tirei o Pz tool do Templo Fiz o Novo Addon do Outfit do Wayfarer A Vip I é free, portanto o comando !buyvip, foi removido, pois implicava com a vip II. Agora editado by: [GOD] Willz » Arrumei todos aqueles malditos bugs. » renovei o temple »a quest vip 2 agora não é mais em agua. »Adicionei 1 quest nova que da vip wand, vip sword e vip star. » ADICIONADO 2 CAVES PARA LVL 400+ PERFEITAS. » O OT ESTA PERFEITAMENTE BALANCEADO. » RETIREI O MALDITO BUG DO DISCONECTED QUE TRAVAVA TODO O OT. » MAIS DE 75% DAS HOUSES DO TEMPLE ESTÃO COM TREINERS. FOTOS: CITY: TREINER NAS HOUSES: Nova quest que da as novas armas do ot, Wand, 1kk, aol infinito, sword e nova arma de pally. A VIP 2 QUEST NAO ESTA MAIS EM AGUA, E EU MELHOREI ALGUMAS PARTES DELA QUE FOI TIPO: TINHA UMA PARTE DE PROTECTION ZONE QUE PRENDIA QUEM TAVA E ETC. Tps com os bixos atrás (sei que não é muito, mas ) Tps da vip 2 arrumados: Enfin mano esse é o ot e como ele está. eu e meus amigos achamos perfeito. creditos a BAIAK: LULA E A MIM. ACC DO GOD: god/god . BOM PROVEITO DO OT SERVER. GOSTOU? DE REP+. LINK PARA DOWNLOAD: http://www.4shared.c...ts_By__GO.html? Scan: https://www.virustot...sis/1329804079/ (pra quem nao sabe, isso é tipo um anti virus. que vai le dizer se tem virus ou não!.) Tipo todo ot tem seus programas que os anti virus pensao que sao virus, normal. HAIL SHADOW ENCORE TEAM :**** , É NOIX MORODO, Charles, fabiano, joao, wesley, erick, SAUL, BIID, IVO, THIAGO, TWISTER, bruno, yumi, HEITOR, GUSTAVO, GABRIEL, LEANDRO FAAH, EVANDRO. GERAL AKI É O TREM FODA... GALERA DO MAL PORRA. vlws :** quem tiver duvidas podem mandar. =] Server oficial: starvideo.servegame.com temple1.bmp temple2.bmp caves1.bmp caves2.bmp novaquest1.bmp vip2.bmp treiners.bmp1 ponto -
[Ot Serv 8.60] Baiak Red Red
waldeck reagiu a DuuhCarvalho por um tópico no fórum
~~BAIAK RED RED~~ Baiak Evolution totalmente editado Agora com 4 Areas Vips: Vip City Vip 2 Master Vip (vip 3) Vip Spanker (Vip 4) Novo Set Full: Spanker Armor (Arm:80) Spanker Legs (Arm:80) Spanker Helmet (Arm:80) Spanker Shield (Def:100) Spanker Boots (Speedy + 75) Spanker Amulet (Aol Infinito) Cuidado pq ele ñ segura seus items se vc tiver red skull Novos Items De Atk: Spanker Wand (Druid e Sorcerer) Spanker Sword Spanker Balls (Paladins) Spanker Axe Eu ñ criei um 'Club pelo fato de ninguém usa 'Club Mais vc msm pode criar um Para vc conseguir esses items vc tem que fazer a quest vip 4 localizada no na área Vip 3, A quest não é muito difícil Pelo fato de que vc tem que fazer a quest vip 2, depois master vip, e enfim a quest vip 4. Comando REp+ No basta ver em !notice no ot Foi retirado todos os bugs Área vip 1 é gratis Mais precisa ser level 200+. Na área vip 2 tem um baú que é uma quest para coloca [Vip] Antes do Nome. Comando /bs para players se comunicarem com todo o ot (qualquer player) Acc Do God: god/god Templo Área Vip 4 Tp's Vip 4 Treiners Novas House em Cima do Templo Não Tem Virus (y' Créditos = Math e Meu Download 4shared: http://www.4shared.com/rar/VXVipFlI/Baiak_Red_Red.html?refurl=d1url Scan: http://virusscan.jot...891093d69bf0832 alguns anti virus detectam virus outros não, isso pq alguns anti virus ñ conhecem o arquivo ~~GOSTOU DA REP+ PLIX~~1 ponto -
Autor: Mock Esse codigo simples permite que você explore todo o seu mapa em questão de minutos (ou horas), automaticamente. Existem alguns problemas, esse codigo pode facilmente gerar debug em quem usa, en tão aconselho usar somente quem tem conexão rapida, ou localhost. O funcionamento é bem simples, o script teleporta você a cada canto do mapa fazendo você liberar o mapa todo!! Como é muito teleport, e todos sabem que se você se teleportar varias vezes muito rapido, esse code tem uma config simples com a opção de mudar o delay e a quantidade de tiles que você vai pular. Na configuração padrão ele vai teleportar você para a posição 36,36,7 e vai até a 1024,1024,10 teleportando você a cada 4 blocos a cada 1 segundo, porem você pode reconfigurar a vontade. Pode repostar onde quiser e usar onde quiser contanto que mantenha os creditos no script. (Y) --Autor: Mock the bear (matheus.mtb7@gmail.com) --MTB local map = { Xmax=1024; Ymax=1024; Xstart=36; YStrart=36; Zstart=7; -- Delay=1000; Skip_tiles=4; Floors_skip=1; --Can be 1 or -1 Floors_count=3; --Start form floor Zstart and stop after be teleproted to 3 floors } function cycle(cid,x,y,z,c) if not isPlayer(cid) then return 0; end x = x+map.Skip_tiles; if x > map.Xmax then x = map.Xmax; end if (getThingFromPos({x=x,y=y,z=z,stackpos=0},false) or {}).uid ~= 0 then doTeleportThing(cid,{x=x,y=y,z=z}) end if x == map.Xmax then x = map.Xstart; y = y+map.Skip_tiles; end if y > map.Ymax then y = map.YStrart z = z+Floors_skip; c = c-1; if c <= 0 then return 0; end end addEvent(cycle,map.Delay,cid,x,y,z,c) end function onSay(cid, words, param) cycle(cid,map.Xstart,map.YStrart,map.Zstart,map.Floors_count) end --MTB1 ponto
-
Mensagens Off
Gabriel Couto reagiu a caotic por um tópico no fórum
Ola galerinha xtibiana. Vou disponibilizar um sistema de mensagens offline de modo simples e pratica. Não e necessário a utilização de database basta um arquivo de texto. Para mandar uma mensagem e so dizer /msg(nome do player, mensagem). E quando o player logar ele vai ter que abrir uma channel de mensagens off e ele receberá as mensagens. Vamos a instalação. Crie um arquivo de TEXTO chamado de mensagens na pasta data do seu otserv Agora vá em lib e crie um arquivo lua chamado de mensagens: function doSendMsg(cid, receptor, msg) local file = io.open("./mensagens.txt", "a") file:write("\n Player "..tostring(receptor).." Mensagem: "..tostring(msg).." por "..getCreatureName(cid).."End") file:close() end function getPlayerMgs(name) local x = {} local msg = io.open("./mensagens.txt", "r") for i in msg:read("*a"):gmatch("Player "..name.." Mensagem: (.-)End") do table.insert(x, tostring(i)) io.close() end return x or 0 end Vá em data/xml e abra o arquivo channel.xml. E coloque isto: Vá em talkactions e crie um arquivo lua chamado de mens e coloque isto: function onSay(cid, words, param, channel) local t = string.explode(param, ",") if not t[1] then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você deve dizer o nome do player /msg(nome do player, mensagem)") and false end if not t[2] then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você deve escrever a mensagem /msg(nome do player, mensagem)") and false end if #t[2] <= 4 then return doPlayerSendCancel(cid, "Você deve dizer a msg com mais de 4 caracteres /msg(nome do player, mensagem)") and false end if not playerExists(t[1]) then return doPlayerSendCancel(cid, "Este player não existe") and false end local pid = getPlayerByNameWildcard(receptor) if pid then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua mensagem não foi enviado porque este player esta online") and false end doSendMsg(cid, t[1], t[2]) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua mensagem foi enviado com sucesso para "..t[1].."") return true end Vá em talkactions.xml e coloque esta tag: Vá em creaturescripts e crie um arquivo lua chamado de mens e coloque este código: function onLogin(cid) local mens = getPlayerMgs(getCreatureName(cid)) local str = "Você tem "..#mens.." mensagens olhe na channel de Mensagens Off" if #mens >= 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, str) return true end return true end Vá em creaturescripts e crie um arquivo lua chamado de mensagens e coloque isto: function onJoinChannel(cid, channelId) if channelId == 68 then local mens = getPlayerMgs(getCreatureName(cid)) for i = 1, #mens do doShowTextDialog(cid, 1397, mens[i]) end return true end return true end Registre o evento em login.lua colocando isto antes do ultimo return true: Vá em creaturescripts e coloque esta tag em creaturescripts.xml: E isto ae pessoal. Agora quando o player logar ele recebe a mensagem e basta ele abrir a channel e ir clikando "Ok" nas paginas do dialogo1 ponto -
Fala galera, voltei aqui denovo ^^ Bom hoje eu tava no pc (ava) dai a net caio (Fuu) entao eo fiz 2 signs 1 pro overpower e 1 pro stack minute (Aaa tonynh eo re-upei tua imagen vo deixa o link no final do topico =) ) Entao aki estão elas Vlw galera ^^ @ EDIT = Gallela ^^1 ponto
-
1º - Obter o Photoshop O Photoshop é o Programa de Edição de imagens mais Utilizados, Por Isso Recomendo Baixá-lo Para Mecher. Existem Várias Versões do Photoshop, As Mais Utilizadas São o Cs2 e o Cs3, Porém eu Utilizo o Cs4 Quem Não Tem, Clique aqui 2º - O Básico O Photoshop Possui Muitas Ferramentas, Que São Muito úteis. A Seguir Farei Uma Descrição De Todas Elas. Marquee Tool(M) - Para Poder Selecionar Partes, Ou Selecionar Uma Determinada Parte Para Aplicar o Efeito. Exitem Quatro "Jeitos? de Seleção: Rectangular, Elliptical, Single Row e Single Column. Move Tool(V) - Ferramenta Usada ParaMover Coisas Lasso Tool(L) - Normalmente Usada Para Recortes, Mas é Mais Complicada =X Magic Wand Tool(W) - Voc? Pode Usá-la para Selecionar areas do seu Layout Por Valores, Cores ou Tons, Dependendo da é Tolerance?. Também Pode Recortar Imagens. Crop Tool - Para Recortar Também. Basta Selecionar Uma área, E Tudo Que Estiver Fora Dela Será Cortada. Slice Tool(K) - Ferramenta Muito útil para Webmasters; Você Pode Fatiar o Seu Documento em Partes Que na Hora de Ser Exportado Vai Ser Automaticamente Recortado em Partes Determinadas, Otimiza Seu Trabalho. Recortando o Seu Layout em Partes, Você Faz com Que Sua Página Indiretamente Carregue Mais Rápido. Você Poderá Definir Opções Para Cada Fatia Como Nome e URL. Heal Brush Tool(J) e Path Tool(J) - Usada Para "Concertar" Imagens Danificadas. Pencil e Brush Tool(B) - Uma Coisa Bastante Usada. É Como se Fosse o Lápis e o Pincel do Famoso "Paint". Você Pode Definir Cor, Grossura, Etc. Existem Alguns Brushes Prontos Com Uns EFeitos Legais. Clone Stamp Tool(S) - Serve Para Copiar Uma Parte da Imagem e Colá-la Na Mesma Layer. Geralmente é Usada Para Remover Espinhas e Cravos de Imagens History Brush Tool(Y) - Serve Para Tornar a Imagem Transparente. Eraser Tool(E) - Usado Para Apagar Coisas Indesejadas. Paint Bucket Tool(E) e Gradient Tool(E) - O Paint Bucket Tool ? Para Pintar Pequenas Partes da Imagem, Como o Balde do Paint. O Gradient Tool Pode Ter 2 Cores Ou Mais e Geralmente é Usado no Trabalho Inteiro. Blur Tool - Sharpen Tool- e Smudge Tool - A Smudge Tool Também é Muito Usada. Serve Para Borrar Determinada Regi?o, e Dependendo do Strenght Tem Diferentes Resultados. A Sharpen Tool Serve Para Dar Mais Nitidez a Imagem, Mas Não Exagere. A Blur Tool, Diferente da Sharpen, Torna a Imagem Embaçada Dodge Tool(O) Burn Tool(O) e Sponge Tool(O) - A Burn Tool Serve Para Escurecer Determinados Pontos, Bastante Usado Para Fazer Iluminação nas Signs. A Dodge Tool, Ao Contrário da Burn Tool, Serve Para Clarear Uma Imagem. Já a Sponge Tool Tira a Saturação de Certa Parte, Ou Seja, A Torna P&B ( Preto & Branco). Path Selection Tool(A) Direct Selection Tool(A) - O Path selection tool serve para selecionar um ponto apenas do shape que fizemos com a Pen tool, assim poderemos editar a forma; o Direct selection tool serve para selecionar todos os pontos do seu shape, ou seja, você o move inteiramente. Horizontal/Vertical Type Tool(T) e Horizontal/Vertical Mask Type Tool(T) - A Horizontal Type Tool é a Ferramenta Usada Para Fazer a Tipografia do Jeito Convencional, Ou Seja, Deitada. Já a Vertical Type Tool Tem a Mesma Função, Porém a Tipografia Fica Vertical. O Horizontal Mask Type Tool tem a mesma função do Horizontal type tool mas ele apenas deixa selecionado o texto, não o preenche, fica como uma máscara; o Vertical Mask Type Tool da mesma forma que o Vertical Type Tool se dispõe de cima para baixo, mas também fica apenas selecionado, não é preenchido. Pen Tool(P) e Freeform Pen Tool(P) - Com a Pen Tool você pode traçar riscos, que podem ser usados junto com o shape tools. o FreeForm Pen Tool é usado bastante para fazer formas arrojadas em layouts para websites, ou formas que não podem ser feitas com outras ferramentas como o Marquee tool, lasso tool... O Add Anchor Point Tool serve para adicionar um ponto a mais no seu shape feito pelo freeform pen tool, para obter um efeito, curva esperado; o Delete Anchor Point Tool deleta o ponto que você desejar, caso ele seja necess?rio, serve para retas, caso você queira uma parte não curva, quanto menos pontos mais fácil fazer a reta. Shape Tools(P) - Com essa ferramenta você pode criar formas pré-definidas: Rectangle, Round Rectangle, Ellipse, Polygon, Line e Custom(qualquer). Podendo fazer janelas com cantos arredondados, muito utilizado por webmasters; na versão 7 se não me engano, essa ferramenta ficou disponível, nas versões anteriores do Photoshop para se fazer uma janela com cantos arredondados, prescisávamos utilizar o Maquee Tool para arredondá-los. Com essa ferramenta tudo se tornou muito mais fácil. Zoom Tool(Z) - Ferramenta Para Dar Zoom e Ver Mais Detalhadamente Certos Pontos Hand Tool(H) - Não tem muita utilidade, apenas substitui a barra de ferramentas; ou a rodinha do seu mouse... Caso seu documento esteja mais comprido que o campo de visão do seu monitor... EyeDropper Tool(I) - Copia a cor de uma área determinada. 3º - Filters Filters São Efeitos Que Podem Ser Aplicados na Sign (Claro Que Não São os únicos) Não Vou Explicar Todos, Pois Acho que é Muito Importante a Pessoa Aprender Mexendo, ás Vezes Ela Pode Aprender Mais Assim Do Que Lendo Tutoriais (Mas Leiam Tutos Mesmo Assim AUSHaush) 4? - Qual a Diferença Entre Avatar e sign? Exemplo de Avatar Exemplo de Sign Começando... As Signs Normalmente Variam de Tamanho ENtre 400x120px At? 440x160px, porém depende da inspiração e estática do designer. Já os Avatares, Aqui na Thunder Cheats Tem o Tamanho 150X 280X, podendo ser menor, se quiserem. A Diferença Entre Eles é Claro, Principalmente o Formato e Tamanho. 5º - O Que é Render? A Render é o Elemento Principal de Uma Sign A Render é Um Objeto, Pessoa, Ou Qualquer Coisa Recortada, Para Ser Colocada na Sua Sign. A Render Tem Que Ser o Mais Importante da Sign 6º - Como Crio um Documento e Aplico Renders? Para Criar um Novo Documento, Basta Ir em File --> New E Colocar os Dados Desejados Para Adicionar Renders, Basta ir em File --> Place e Posicioná-la 7º I - O Que é Blending Mode? O Blending Mode é o Modo da Camada. Cada Blending Mode Tem Características Específicas 7º II - Os Blending Modes Normal Edita ou pinta cada pixel para transformá-lo na cor resultante. Esse é o modo padrão (o modo Normal é chamado de Limiar quando se trabalha em imagens bitmaps ou de cores indexadas). Dissolve / Dissolver Edita ou pinta cada pixel para transformá-lo na cor resultante. Entretanto, a cor resultante é uma substituição aleatória dos pixels pela cor básica ou de mesclagem, dependendo da opacidade na localização de qualquer pixel. Darken / Escurecer Examina as informações de cor em cada canal e seleciona a cor básica ou de mesclagem (a que for mais escura) como cor resultante. Os pixels mais claros que a cor de mesclagem são substituídos e os mais escuros não são alterados. Multiply / Multiplicar Examina as informações de cor em cada canal e multiplica a cor básica pela cor de mesclagem. A cor resultante é sempre a mais escura. Multiplicar qualquer cor por preto produz a cor preta. Multiplicar qualquer cor por branco não altera a cor. Ao pintar com uma cor que não seja preto ou branco, as pinceladas sucessivas de uma ferramenta de pintura produzem cores progressivamente mais escuras. O efeito é semelhante ao de se desenhar na imagem com vários marca-textos. Color Burn / Superexposicao de cores Examina as informações de cor em cada canal e escurece a cor básica para refletir a cor de mesclagem, aumentando o contraste. Mesclar com branco não produz alterações. Linear Burn / Superexposicao Linear Examina as informações de cor em cada canal e escurece a cor básica para refletir a cor de mesclagem, diminuindo o brilho. Mesclar com branco não produz alterações Lighten / Clarear Examina as informações de co em cada canal e seleciona a cor básica ou de mesclagem (a que for mais clara) como cor resultante. Os pixels mais escuros que a cor de mesclagem são substituídos e os mais claros não são alterados. Screen / Divisao Examina as informaões de cor em cada canal e multiplica o inverso das cores de mesclagem básica. A cor resultante é sempre mais clara. Dividir por preto não altera a cor. Dividir pro branco produz a cor branca. O efeito é semelhante a projetar vários slides fotográficos, um sobre o outro. Color Dodge / Subexposicao de cores Examina as informações de cor em cada canal e clareia a cor básica para refletir a cor de mesclagem, diminuindo o contraste. Mesclar com preto não produz alterações. Linear Dodge / Subexposicao Linear Examina as informações de cor em cada canal e clareia a cor básica para refletir a cor de mesclagem, aumentando o brilho. Mesclar com preto não produz alterações. Overlay / Sobrepor Multiplica ou divide as cores, dependendo da cor básica. Padrões ou cores se sobrepõem aos pixels existentes, preservando os realces e as sombras da cor básica. A cor básica não é substituida e sim misturada com a cor de mesclagem, para refletir a luminosidade ou a sombra da cor original. Seu resultado ira depender da camada inferior Soft Light / Luz indireta Escurece ou clareia as cores, dependendo da cor de mesclagem. O efeito é semelhante ao de iluminar a imagem com uma luz de spot difusa. Se a cor de mesclagem (origem da luz) for mais clara que 50% cinza, a imagem ficará mais clara, como se tivesse sido subexposta. Se a cor de mesclagem for mais escura que 50% cinza, a imagem será escurecida como se tivesse sido superexposta. A pintura com preto ou branco puro produz uma área mais escura ou mais clara, de forma distinta, mas não resultará em preto ou branco puro. Hard Light / Luz direta Multiplica ou divide as cores, dependendo da cor de mesclagem. O efeito é semelhante ao de iluminar a imagem com uma luz de spot direta. Se a cor de mesclagem ( origem da luz) for mais clara que 50% cinza, a imagem ficará mais clara, como se tivesse sido dividida. Isso é importante ao adicionar realces a uma imagem. Se a cor de mesclagem for mais escura que 50% cinza, a imagem será escurecida, como se tivesse sido multiplicada. Isso e importante ao adicionar sombras a uma imagem. Pintar como preto ou branco puro resulta em preto ou branco puro. Vivid Light / Luz brilhante Superexpõe ou subexpõe as cores, aumentando ou diminuindo o contraste, dependendo da cor de mesclagem. Se a cor de mesclagem ( origem da luz) for mais clara que 50% cinza, a imagem será clareada pela diminuição do contraste. Se a cor de mesclagem for mais escura que 50% cinza, a imagem será escurecida pelo aumento de contraste. Linear Light / Luz Linear Superexpõe ou subexpõe as cores, aumentando ou diminuindo o brilho, dependendo da cor de mesclagem. Se a cor de mesclagem ( origem da luz) for mais clara que 50% cinza, a imagem será clareada pelo aumento de brilho. Se a cor de mesclagem for mais escura que 50% cinza, a imagem será escurecida pela diminuição de brilho. Pin Light / Luz do pino Substitui as cores, dependendo da cor de mesclagem. Se a cor de mesclagem ( origem da luz) for mais clara que 50% cinza, os pixels mais escuros que a cor de mesclagem são substituídos e os mais claros não são alterados. Se a cor de mesclagem for mais escura que 50% cinza, os pixels mais claros que a cor de mesclagem são substituídos e os mais escuros não são alterados. Isso é importante ao adicionar efeitos especiais a uma imagem. Diference / Diferenca Examina as informações de cor em cada canal e subtrai a cor de mesclagem da cor básica ou a cor básica da cor de mesclagem, dependendo de qual tiver brilho maior. Mesclar com branco inverte os valores da cor básica, enquanto mesclar com preto não produz alterações. Exclusion / Exclusao Cria um efeito semelhante, mas de menor contranste que o do modo Diferença. Mesclar com branco inverte os valores da cor b?sica. Mesclar com preto não produz alterações. Hue / Matiz Cria uma cor resultante com a luminosidade e a saturação da cor básica e com a matiz da cor de mesclagem Saturation / Saturação Cria uma cor resultante com a luminosidade e a matiz da cor básica e com a saturação da cor de mesclagem. Pintar com esse modo em uma área com saturação zero ( cinza) não produz nenhuma alteração. Color / Cor Cria uma cor resultante com a luminosidade da cor básica e com a matiz e a saturação da cor de mesclagem. Isso preserva os níveis de cinza na imagem e ú útil para colorir imagens monocromáticas e pintar imagens coloridas. Luminosity / Luminosidade Cria uma cor resultante com o matiz e a saturação da cor básica e com a luminosidade da cor de mesclagem. Esse modo cria um efeito inverso ao efeito de modo Cor. 8º - Como Aplico C4d's ? http://t1.gstatic.co...6BtQSnbK58nG06Q Exemplo de C4d's C4d's São Uns Efeitos Bem Legal Para a Sign Mas Se Posicioná-los Mal, Pode Acabar Com a Sign Para Colocá-los, é Igual a Renders... File --> Place Mas Não Basta Só Fazer Isso. Precisa Mudar Seu Blending Mode. Normalmente Usa-se Lighten, Linear Dodge (Mais Usado) Ou Screen. 9º - Como Coloco Borda? É Simples, Primeiro Selecione Tudo Apertando Ctrl A Em Seguida, Vá Em Edit --> Stroke e Coloque o Tamanho e a Cor! 10º - Como Faço um BG Legal? Fazer o BG Pode Ser Algo Difícil, Porém é Apenas Deixar a Imaginação Fluir. Você Pode Fazer um BG Smudgeando Renders, Ou Simplesmnete Colocando Algumas C4d's, Dando Alguns Efeitos Como Radial Blur, Usando Brushes, Enfim, Existem Muitos Modos! 11º - Saturação Perceba a Diferença. Primeira Sign Normal, Segunda Saturada A Saturação é o Que Dã Cores á Sign. Uma Saturação Muito Baixa Resulta Numa Sign Em Preto e Branco. A Saturação Pode Dar Um Toque Muito Legal á Sign, Mas Do Mesmo Jeito Pode Acabar Com Ela. Uma Saturação Muito Alta Deixa as Cores Muito Fortes, Fica Ruim de Se Ver e Chega a Doer os Olhos Caso Não ENtendeu, Pegue Uma Sign, Dê um Apply Image, Aperte Ctrl U e Aumente a Saturação. Você Notará a Diferença. 12º - Dicas Bom Galera... Pra Quem Está Começando, é Muito Importante Que Leia Tutoriais, Pois é Com Eles Que Se Aprende Muita Coisa, Técnicas Novas, Estilos Novos, Etc. Não Saia Por Aí fazendo Signs Que Nem Loco, Procure Ler Bastnate Tutoriais, Procurar Reproduzir o Efeito do Tuto, Aí Quando Tiver Uma Boa Série de Informações Faça a Sign. Considerações finais: Tutorial feito por _-CєяßєRט§ RєßøRи§-_1 ponto
-
Shields [Spriting]
Desnecessario reagiu a S3TZ3N por um tópico no fórum
Eae, continue assim e conseguira ir longe, fiz um editizin aqui pra você espero que goste! Tai /\ se quiser aprender mais spriting tem o canal do meu amigo de spriting Insaend no youtube http://www.youtube.com/user/tuelloz tchal tchal, espero que evolua1 ponto -
Script quest
Hamsterbob reagiu a brun123 por uma questão
vê se funciona: function onUse(cid, item, frompos, item2, topos) doTransformItem(item.uid, item.itemid == 2058 and 2059 or 2058) local pos = topos pos.x = pos.x - 1 pos.y = pos.y + 1 local caixao, transformto = getTileItemById(pos, 1417), 7525 if caixao.uid <= 1 then caixao, transformto = getTileItemById(pos, 7525), 1417 end doTransformItem(caixao.uid, transformto) pos.y = pos.y + 1 caixao = getTileItemById(pos, transformto == 1417 and 7521 or 1418) doTransformItem(caixao.uid, transformto == 1417 and 1418 or 7521) return true end1 ponto -
Seu último mapa - your last map
Gabriel Couto reagiu a chauz por um tópico no fórum
Na verdade nem tudo ingame, eu nao gostei muito porque sei que voce tem potencial pra mostrar algo melhor que este mapa, tem um bug ali na parede do primeiro andar que voce esqueceu de botar ground e ficou preto na parede, voce esqueceu uma borda da montanha(proximo a cachoeira), e poderia botar mais musgo no chao e se quisesse variar com akelas walls escuras. Bom de ter ver de volta continue postando, abraço1 ponto -
Procure na barra de pesquisa como pegar spr do cliente, tem muitos turoriais no forum Esse feito pelo Mozark001 acho que pode te ajudar. Link1 ponto
-
VOCÊ foi sorteado por mim para ganhar um kit pedidos de design.. Espero que goste. Kit Entregue. Avatar: Sign 1: Sign 2: Sign 3 (GIF): Fan bar 1: Fan bar 2 (GIF):1 ponto
-
function onTargetTile(cid, position) position.stackpos = 255 local creature = doCreateMonster("azerus", position, false) doConvinceCreature(cid, creature) if isCreature(getCreatureTarget(cid)) then doTeleportThing(creature, getClosestFreeTile(creature, getThingPos(getCreatureTarget(cid))), false) end doSendMagicEffect(position, CONST_ME_MAGIC_BLUE) return true end local arr = { {1, 0, 1}, {0, 2, 0}, {1, 0, 1}, } local removeTime = 1.0 --time to remove the clones local function removeCreatures(cid, creature) if isCreature(creature) == TRUE then doRemoveCreature(creature) end end function onTargetTile(cid, pos) local creature = doSummonCreature("azerus", pos) doCreatureAddMana(cid, -1500) doCreatureSay(cid, "Utevo", TALKTYPE_ORANGE_1) doConvinceCreature(cid, creature) if isCreature(getCreatureTarget(cid)) then doTeleportThing(creature, getClosestFreeTile(creature, getThingPos(getCreatureTarget(cid))), false) end addEvent(removeCreatures, removeTime * 1000, cid, creature) return TRUE end local area, combat = createCombatArea(arr), createCombatObject() setCombatArea(combat, area) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(cid, var) return doCombat(cid, combat, var) end1 ponto
-
1 ponto
-
[Encerrado] PDA By Slicer 1.8 Sem LvL
Hikigaya reagiu a StyloMaldoso por um tópico no fórum
Me enganei, pode cria do geito q ta la no tutorial, vai da certo.1 ponto -
Pack 650 C4D's Descrição: Um excelente pacote de C4D's No total são 650 c4ds.. Tamanho: 336 mb Formato: .RAR/.JPG/.PNG Servidor: 4SHARED. Senha para descompactar : uploadporrskwww.gsmfans.com.br Preview: Click aqui Créditos : .RSK 4 SHARED (Link único) 1ª Parte -----------Mediafire----------- 2ªParte1 ponto
-
Galera eu estou trazendo um pack de renders para vocês que encontrei e gostei muito.. Próximo tópico será com pacote de C4D's Descrição: 601 Renders avulsas.. Tamanho: 234MB. Formato: .RAR/.PNG Servidor hospedado: 4shared Uploader: .RSK Preview: Click aqui Créditos : .RSK1 ponto
-
Será que tem como fazer umas adiçoes aqui ? e resolver 1 bug?
tonynamoral reagiu a LuckOake por uma questão
O script tá meio pogado, mas acho que deu certo. Testa ai:1 ponto -
Script da Semana Voltou!
capitaocueca10 reagiu a caotic por um tópico no fórum
Eai xtibianos? O SDS e um concurso que acontece semanalmente ele e uma votação dos scripts postados na semana. Mais por causa de motivos pessoais da equipe como os feriados(natal e virada do ano) ele teve quer dar uma parada. O LuckOake já adiantou o resultado Estaremos voltando o SDS e as semanas perdidas tentaremos colocar alguns scripts. Não se esqueça de conferir a volta do SDS. Então prepare seu script e venha participar do SDS. Para ver as regras: http://www.xtibia.co...-atuais-do-sds/ Pontos do SDS: http://www.xtibia.co...910-pontos-sds/ Confira também o resultado do SDS #27: http://www.xtibia.co...sultado-sds-27/1 ponto -
Use a barra de pesquisa no topo da página da proxima.. Script Outifit Sobre o acc manager, não achei nada.1 ponto
-
Cara, eu fiz esse set a um tempinho pra você, quando você fez o pedido na fábrica, porém já tinham te atendido lá no tópico :s Pega essa1 ponto
-
poderia por soh.. local x = exhaustion.get(cid, 12346) or 01 ponto
-
Fiz só sign mesmo, e não gostei muito do resultado. Estou sem ideias =( Vou descansar um pouco! Abraços!1 ponto
-
Resolvi entrar na onda também =p1 ponto
-
ta ai :s não sei se tu gosta, mas eu fiz uma signzinha basica tbm1 ponto
-
1. Render = Imagens que se usam para fazer trabalhos.. São imagens já recortadas, que é só você usar onde quiser (caso tenha permissão do autor) 2. Stock = São imagens ainda não recortadas, normalmente são fotos, ou paisagens! Quando recorta-se a parte principal da stock, como por exemplo uma pessoa, essa parte vira uma render. 3. C4D / 3D render = São imagens feitas em programas 3D ( Como o cinema4D ), que são usadas em SIGNS. 4. Sign = Imagens, normalmente por volta do tamanho 400x130, que são usadas na assinatura dos foruns. Dái o nome : SIGNATURE(em ingles) -> SIGN 5. Sprite Sprite são imagens em duas dimenssões muito usadas em gifs animados tais como Mário Sf etc.. 6. PSD's = São arquivos do Photoshop, que permitem visualizar como foi feito um trabalho.1 ponto
-
1 ponto
-
[Encerrado] [Pedido] Npc outland
xurupita360 reagiu a Slicer por um tópico no fórum
mano tudo q tem q editar ta com a tag --alterem aki... tem q mexer em bastante coisa.. mas n eh tao complicado.. duvida sanada, topico movido1 ponto -
[Conjunto] Anyur + Brund
Superior reagiu a Gabriel Couto por um tópico no fórum
Brund é, eu não ahhaha Tentei deixar algo sem ser só nature, entende? E como é um mapa feito pra show off e descartado depois, não teria como fazer essa curva, sei lá! Acho mais legal em show off deixar assim, reto e com o grass entrando em cima! Novo mapa! Não sei se ficou bom, comentem Primeiro que faço nesse estilo!1 ponto -
Hoje vamos dar continuidade as aulas. Aprenderemos Lógica, Algorítimos e Organização, que para mim são as coisas básicas que TODO programador deve conhecer. Lógica de Programação O que é Lógica de Programação? é uma sequencia de pensamentos com fim de atingir determinado resultado. E esses pensamentos, podem ser usados para construir uma sequencia lógica, afim de executar uma ação da maneira mais simples o possível. Isso é o conceito básico de lógica de programação. Algorítimos Agora começa a parte divertida. Algorítimo é uma sequencia de comandos(instruções) para executar tal ação, como uma receita que sua mãe usa para fazer bolos. Quaisquer sequencias de instruções podem ser consideradas algorítimos. "Algorítimo de Chupar uma bala". • Pegar a bala • Retirar o papel • Chupar a bala • Jogar o papel no lixo Todos algorítimos devem ser simples e objetivos. Organização Essa é uma parte realmente "importante": (O Mock deveria ler isso todo dia, falo mesmo) Endentação: Endentação, identação ou edentação, é o espaçamento no inicio de qualquer paragrafo, afim de diferenciar e melhorar a visualização dos escopos do algorítimo. Código sem indentação (Na verdade ele tem, mas eu tirei para usar de exemplo) function doPlayerAddAchiev(cid, achievid) local pid = getPlayerGUID(cid) local value = tonumber(getPlayerAchievById(cid, achievid)) if value == -1 then return true end if value == 0 then db.executeQuery("INSERT INTO `achievements` (`player_id`, `achievement_id`, `value`) VALUES ('"..pid.."', '"..achievid.."', '1');") end if (tonumber(getPlayerAchievById(cid, achievid)) >= achievs[achievid].qt) then doPlayerSendTextMessage(cid,22, 'Você recebeu a conquista "'..achievs[achievid].name..'"') db.executeQuery("UPDATE `achievements` SET `value` = ".. -1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") doPlayerAddAchievPoint(cid, achievs[achievid].pt) else db.executeQuery("UPDATE `achievements` SET `value` = ".. (tonumber(getPlayerAchievById(cid, achievid))) + 1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") end doPlayerSave(cid) return true end Código com identação: function doPlayerAddAchiev(cid, achievid) local pid = getPlayerGUID(cid) local value = tonumber(getPlayerAchievById(cid, achievid)) if value == -1 then return true end if value == 0 then db.executeQuery("INSERT INTO `achievements` (`player_id`, `achievement_id`, `value`) VALUES ('"..pid.."', '"..achievid.."', '1');") end if (tonumber(getPlayerAchievById(cid, achievid)) >= achievs[achievid].qt) then doPlayerSendTextMessage(cid,22, 'Você recebeu a conquista "'..achievs[achievid].name..'"') db.executeQuery("UPDATE `achievements` SET `value` = ".. -1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") doPlayerAddAchievPoint(cid, achievs[achievid].pt) else db.executeQuery("UPDATE `achievements` SET `value` = ".. (tonumber(getPlayerAchievById(cid, achievid))) + 1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") end doPlayerSave(cid) return true end Dá para perceber uma diferença bem grande na parte de visualização, certo? Nomenclatura: Essa é outra parte importante que poucos prestam atenção. Você deve criar os códigos para os OUTROS (mesmo que você não for liberar ele), e você deve imaginar que TODO mundo não entende nada de programação. Por isso, você deve usar nomes simples e sugestivos. Você NUNCA deve usar nomes assim: local var_que_solta_raio_lasers_e_panz = 12 Tente sempre ser sugestivo, nomes mais simples: local quantidade_de_stones = 12 Comentários: Essa é uma das partes mais importantes, na minha opinião. Sempre que for começar alguma ação ou escopo, comente no final da 1º Linha o que ele faz, como ele faz e por que ele faz. Como eu já disse, você deve pensar que está programando para pessoas leigas. Sem comentário: function doPlayerAddAchiev(cid, achievid) local pid = getPlayerGUID(cid) local value = tonumber(getPlayerAchievById(cid, achievid)) if value == -1 then return true end if value == 0 then db.executeQuery("INSERT INTO `achievements` (`player_id`, `achievement_id`, `value`) VALUES ('"..pid.."', '"..achievid.."', '1');") end if (tonumber(getPlayerAchievById(cid, achievid)) >= achievs[achievid].qt) then doPlayerSendTextMessage(cid,22, 'Você recebeu a conquista "'..achievs[achievid].name..'"') db.executeQuery("UPDATE `achievements` SET `value` = ".. -1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") doPlayerAddAchievPoint(cid, achievs[achievid].pt) else db.executeQuery("UPDATE `achievements` SET `value` = ".. (tonumber(getPlayerAchievById(cid, achievid))) + 1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") end doPlayerSave(cid) return true end Com Comentário: function doPlayerAddAchiev(cid, achievid) local pid = getPlayerGUID(cid) -- declaração da variavel com GUID do player. local value = tonumber(getPlayerAchievById(cid, achievid)) -- Declaração da váriavel que irá conter o valor do Achiev. if value == -1 then return true end -- Se o valor for 0, então ele irá retornar true e irá parar o código aqui. if value == 0 then db.executeQuery("INSERT INTO `achievements` (`player_id`, `achievement_id`, `value`) VALUES ('"..pid.."', '"..achievid.."', '1');") end -- Se ele for 0, então ele irá mudar o valor para 1. if (tonumber(getPlayerAchievById(cid, achievid)) >= achievs[achievid].qt) then -- Se o valor for maior ou igual ao valor da tabela, então ele irá executar o escopo. doPlayerSendTextMessage(cid,22, 'Você recebeu a conquista "'..achievs[achievid].name..'"') db.executeQuery("UPDATE `achievements` SET `value` = ".. -1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") doPlayerAddAchievPoint(cid, achievs[achievid].pt) else -- Se não, ele executará esse escopo. db.executeQuery("UPDATE `achievements` SET `value` = ".. (tonumber(getPlayerAchievById(cid, achievid))) + 1 .." WHERE `player_id`= " .. pid .. " AND `achievement_id`= " .. achievid .. ";") end doPlayerSave(cid) return true end Finalização Espero que tenham gostado dessa aula, tentei ser direto e simplório. Porém eu falei só sobre o básico, só a ponta do iceberg. Quem tiver mais interesse, o google tem milhares de apostilas sobre Algorítimos de Lógica de Programação. Link da primeira aula: http://www.xtibia.com/forum/topic/201079-aulas-basicas-com-o-sr-iunix-1-lua-o-que-e1 ponto
-
Bom, para quem não me conhece, meu nick é iuniX. Sou programador faz uns 2 anos. Minha linguagem principal é Lua, porem domino algumas outras. Ok, agora vamos para a aula. O que é Lua? Lua é uma linguagem interpretada e comparada a outras linguagens interpretadas, ela é bem leve e versátil. Lua tem uma sintaxe bem simples de entender e ela é MUITO útil. Ela também é uma linguagem TOTALMENTE brasileira, feita na PUC-Rio. Mas por que usar Lua? Como eu disse acima, Lua é uma linguagem simples e poderosa. Isso a torna perfeita para aplicativos que requerem edições constantes (Como nosso Open Tibia). E também pelo fato de Lua ter um manual realmente completo e bem explicado. Sem contar que Lua é uma linguagem livre (Pode ser usada para qualquer coisa ou pessoa) O que é uma linguagem interpretada? Linguagens interpretadas, são linguagens de programação que precisam de um interpretador, também conhecidas como linguagem de scripting. Algo que "traduza" ela para a máquina (No nosso caso, usamos o distro do Open Tibia). Elas não precisam ser compiladas, isso geralmente as tornam mais eficientes para pequenas e rápidas edições. Onde arrumar um interpretador para Lua? O próprio site da linguagem tem um pequeno interpretador: http://www.lua.org/demo.html, mas para algo mais "sério", eu aconselho vocês a usarem o Scite (postarei o link abaixo). Finalização Queria agradecer a todos que leram tudo. E espero que com esse tópico eu desperte interesse em alguns, fazer essa grande linguagem que eu gosto tanto crescer. Gostaria que vocês me ajudassem com um feedback, dicas e que postem duvidas para eu responder. Download Scite: http://sourceforge.n...=ufpr&download=1 ponto
-
[Mapping] Mostre suas Idéias
curruwilliam reagiu a vital900 por um tópico no fórum
Ideias sobre: Nature: Mistura de galhos Créditos: Daaniel, TK Entrada do cogumelo & Passagem pelas folhas & Aranha em sua teia Créditos: MetalChau, EK Espada encravada na pedra Construção: Trem No tibia & uma mini torre com um telhado massa & grande pé de morango. Créditos: MetalChau, EK Ponte 'alternativa' Créditos: MetalChau, EK Uma mina em perspectiva totalmente diferente (créditos: MetalChau, EK) Toda a mina Entrada da mina, e caminho do carrinho Um homem que morreu escalando a mina e o dragão botando fogo nesta Uma entrada de cave, diferente Trilhos partidos1 ponto -
1 ponto
-
Ye Olde Blacksmith
AlbertEinstein reagiu a Oneshot por um tópico no fórum
Nome: Ye Olde Blacksmith Tipo: NPC Autor: Oneshot Este é um simples NPC pedido por muitos, ele troca certos itens por outros itens, similar ao sistema de forja que desenvolvi. Crie um arquivo chamado blacksmith.lua em data/npc/scripts, com o nome que você desejar. Coloque o conteúdo abaixo: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local forge = {} local recipes = { [2390] = { {2157, 1}, {2400, 1}, {2149, 100} } } function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function onGreetCallback(cid) talkState[cid] = 0 forge[cid] = {match = nil, recipe = nil} return true end function onCreatureSayCallback(cid, class, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if talkState[talkUser] == 0 then for itemid, items in pairs(recipes) do if msgcontains(msg, getItemNameById(itemid)) then forge[talkUser] = {match = itemid, recipe = items} break end end if forge[talkUser].match ~= nil then local str, sep = "Good choice, I will need" local n = 1 for _, item in ipairs(forge[talkUser].recipe) do sep = (n == 1) and " " or (n == #forge[talkUser].recipe and " and " or ", ") str = str .. sep .. (item[2] or 1) .." ".. getItemNameById(item[1]) n = n + 1 end str = str ..". Agreed?" npcHandler:say(str, cid) talkState[talkUser] = 1 else npcHandler:say("Sorry, I don't know how to forge it.", cid) end elseif talkState[talkUser] == 1 then if msgcontains(msg, "yes") then local ret = {} for _, item in ipairs(forge[talkUser].recipe) do local g = getPlayerItemById(cid, true, item[1]) if g.uid > 0 and math.max(1, g.type) >= item[2] then table.insert(ret, {g.uid, item[2]}) else ret = {} break end end if #ret > 0 then for _, item in ipairs(ret) do doRemoveItem(item[1], item[2]) end doPlayerAddItemEx(cid, doCreateItemEx(forge[talkUser].match, 1)) npcHandler:say("Thank you, heh, here is your ".. getItemNameById(forge[talkUser].match) ..".", cid) else npcHandler:say("Sorry, but you don't have all the items I need.", cid) talkState[talkUser] = 0 forge[talkUser] = {match = nil, recipe = nil} end elseif msgcontains(msg, "no") then npcHandler:say("Alright, do you need anything else?.", cid) talkState[talkUser] = 0 forge[talkUser] = {match = nil, recipe = nil} end end return true end local greet, sep = "Hello, |PLAYERNAME|. Actually I can trade {rare} stuff for some items, pretty, heh? This is what I have:" local n = 1 for item, recipe in pairs(recipes) do sep = (n == 1) and " " or (n == #recipes and " and " or ", ") greet = greet .. sep .. "{".. getItemNameById(item) .."}" n = n + 1 end npcHandler:setMessage(MESSAGE_GREET, greet) npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, onCreatureSayCallback) npcHandler:setCallback(CALLBACK_GREET, onGreetCallback) npcHandler:addModule(FocusModule:new()) Crie um arquivo XML para o NPC em data/npc/ <?xml version="1.0" encoding="UTF-8"?> <npc name="Ye Olde Blacksmith" script="nome_do_arquivo.lua" walkinterval="0" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> </npc> Você pode mudar o visual do NPC alterando os números dessa linha: <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> Para configurar os itens que o NPC pode fazer e os itens que são necessários, altere a tabela abaixo: local recipes = { [2390] = { {2157, 1}, {2400, 1}, {2149, 100} } } Sempre seguindo a estrutura da tabela, colocando vírgula no final da chave "}" com exceção da última. Abraços.1 ponto -
@FlamesAdmin se tu tiver flando oq to pensando... ACHU q soh mudando no database...1 ponto
-
[8.60] Styller Yourots {Editado 2.0}
99663100 reagiu a mercenaryy por um tópico no fórum
hum... interessante, mas bem que poderia colocar umas imagens dos pontos mais interessante ai pra galera bem é que sou novo aki ainda estou aprendendo mais vou postar sim1 ponto -
Autor: Mock the bear Servidor testado: TFS 0.3.6 Depois de muita espera eu dei a chance de liberar o script, disse que iria postar assim que descobrissem como criar um tile onde não tem. Pois bem um cara desse forum chamado kydrai descobriu e coube ao lucas123 mostrar. Parabens kydrai ;D Script dedicado a vc. A minnha funçao é essa: function doCreateTile(id,pos) -- By mock doAreaCombatHealth(0,0,pos,0,0,0,255) doCreateItem(id,1,pos) end E a dele é essa: function doCreateTile(cid, tileid, pos) -- by Kydrai doCombatAreaHealth(cid, 0, pos, 0, 0, 0, CONST_ME_NONE) doCreateItem(tileid, 1, pos) end O principio é o mesmo. Abusar de um bug do distro que cria um tile quando executa uma spell. E com o tile pode criar o SQM. Bom vamos começar. Primeiro crie um arquivo chamado flylib.lua na pasta data/lib do seu server e coloque isso: CONST_FLYVOID = 460 CONT_FLYOUTFIT = 239 IGNORED = {6495,7096,7099,5167,5162,5163,405,7100, 5315,5521,5316,5193,5192,5191,945,5048,923,950,951, 952,953,3623,954,955,949,9101,3352,9106,9103,1524, 1111,437,433,443,434,442,436,445,941,444,435,943, 1027,925,930,926,928,922,921,1112,406,904,931,934, 932,933,5319} --- Config here up = {} down = {} fly = {} fly.win = function(cid)-- Script by mock setPlayerStorageValue(cid, 102015,1) doPlayerSendTextMessage(cid,27,'Now you can fly.') end fly.add = function(cid)-- Script by mock if getPlayerStorageValue(cid, 102015) == -1 or getPlayerStorageValue(cid,13241) == 1 then return false end if getPlayerStorageValue(cid, 102059) <= 0 then local outfit = getCreatureOutfit(cid) outfit.lookType = CONT_FLYOUTFIT doSetCreatureOutfit(cid, outfit, -1) setPlayerStorageValue(cid, 102059,1) doChangeSpeed(cid, 390) doPlayerSendTextMessage(cid,27,'Fale \'up\' e \'down\'.' ) return true else doPlayerSendTextMessage(cid,27, "Você ja esta voando.") return false end end function isWalkable(pos, creature, proj, pz)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end fly.using=function(cid)-- Script by mock return getPlayerStorageValue(cid, 102059) > 0 end fly.logout = function(cid)-- Script by mock if fly.using(cid) then local p = getCreaturePosition(cid) setPlayerStorageValue(cid, 102010,1) setPlayerStorageValue(cid, 102011,p.x) setPlayerStorageValue(cid, 102012,p.y) setPlayerStorageValue(cid, 102013,p.z) deletarEmVolta(p) fly.del(cid) end return true end fly.login = function(cid)-- Script by mock if getPlayerStorageValue(cid, 102010) ~= -1 then setPlayerStorageValue(cid, 102010,-1) local p = {} p.x = getPlayerStorageValue(cid, 102011) p.y = getPlayerStorageValue(cid, 102012) p.z = getPlayerStorageValue(cid, 102013) if not checkAround(p) then fly.add(cid) down.gerarEmVolta(p) doTeleportThing(cid,p) end end return true end fly.die = function(cid)-- Script by mock if fly.using(cid) then local p = getCreaturePosition(cid) setPlayerStorageValue(cid, 102011,-1) setPlayerStorageValue(cid, 102012,-1) setPlayerStorageValue(cid, 102013,-1) deletarEmVolta(p) fly.del(cid) end return true end fly.del = function(cid)-- Script by mock if getPlayerStorageValue(cid, 102059) > 0 then if getSqmId(getCreaturePosition(cid)).itemid == CONST_FLYVOID then return false end doRemoveCondition(cid, CONDITION_OUTFIT) setPlayerStorageValue(cid, 102059,-1) doChangeSpeed(cid, -390) return true end end function hasSqm2(pos)-- Script by mock local f = getTileThingByPos(pos) if f.itemid ~= 0 and f.itemid ~= 1 and (not isWalkable(pos) and not isInArray(IGNORED,f.itemid)) then return true end return false end function hasSqm3(pos)-- Script by mock local f = getTileThingByPos(pos) if f.itemid ~= 0 and f.itemid ~= 1 and f.itemid ~= CONST_FLYVOID and not isInArray(IGNORED,f.itemid) then return true end return false end function deletar(pos)-- Script by mock if hasSqm(pos) then local sqm = getSqmId(pos) if sqm.itemid == CONST_FLYVOID then doRemoveItem(sqm.uid,1) end end end function deletarEmVolta(pos) for x=-1,1 do for y=-1,1 do deletar({x=pos.x+x,y=pos.y+y,z=pos.z}) end end end function checkAround(pos)-- Script by mock for x=-1,1 do for y=-1,1 do if hasSqm2({x=pos.x+x,y=pos.y+y,z=pos.z}) then return true end end end return false end function fly.checkAround(pos)-- Script by mock local n = 0 for x=-1,1 do for y=-1,1 do local g = getTileThingByPos({x=pos.x+x,y=pos.y+y,z=pos.z}) if g.itemid == CONST_FLYVOID then n = n+1 end if isCreature(getTopCreature({x=pos.x+x,y=pos.y+y,z=pos.z}).uid) then return false end end end if n == 9 then return true end return false end function up.checkAround(pos)-- Script by mock for x=-1,1 do for y=-1,1 do local g = getTileThingByPos({x=pos.x+x,y=pos.y+y,z=pos.z}) if hasSqm3({x=pos.x+x,y=pos.y+y,z=pos.z}) or g.itemid == CONST_FLYVOID then return true end end end return false end function down.checkAround(pos,f)-- Script by mock for x=-1,1 do for y=-1,1 do local g = getTileThingByPos({x=pos.x+x,y=pos.y+y,z=pos.z}) if (not f and hasSqm2({x=pos.x+x,y=pos.y+y,z=pos.z})) or g.itemid == CONST_FLYVOID then return true end end end return false end function gerarEmVolta(pos)-- Script by mock local n = 30000 for x=-1,1 do for y=-1,1 do n =n+1 doItem({x=pos.x+x,y=pos.y+y,z=pos.z},n) end end end function doItem(pos,a,d)-- Script by mock if not hasSqm2(pos) then doCreateTile(CONST_FLYVOID,pos) pos.stackpos = 0 local c = getTileThingByPos(pos) doSetItemActionId(c.uid, a) end end function getSqmId(pos,t)-- Script by mock if hasSqm(pos) or t then pos.stackpos = 0 local i = getTileThingByPos(pos) return i end return nil end function down.doItem(pos,a)-- Script by mock if not hasSqm(pos) then doCreateTile(CONST_FLYVOID,pos) pos.stackpos = 0 local c = getTileThingByPos(pos) doSetItemActionId(c.uid, a) end end function down.gerarEmVolta(pos)-- Script by mock local n = 30000 for x=-1,1 do for y=-1,1 do n =n+1 down.doItem({x=pos.x+x,y=pos.y+y,z=pos.z},n) end end end function doCreateTile(id,pos) -- Script by mock doAreaCombatHealth(0,0,pos,0,0,0,255) doCreateItem(id,1,pos) end Agora é 1 scritp em creaturescripts, 3 em talkactions e 1 em movements. Creaturescripts Em seu login.lua coloque isso: fly.login(cid) no seu logout.lua coloque isso: fly.logout(cid) e no script que o player morre coloque isso: fly.die(cid) Isso é para quando o player entrar e sair do server pra voltar onde ele estava :coolface: Movements Em movements.xml: <movevent type="StepIn" actionid="30001" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30002" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30003" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30004" event="script" value="fly.lua"/> <movevent type="StepOut" actionid="30005" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30006" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30007" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30008" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30009" event="script" value="fly.lua"/> <movevent type="AddItem" tileitem="1" itemid="460" event="script" value="fly.lua"/> E no script fly.lua ---Script by mock the bear function doCopyItem(item,pos) ---Script by mock the bear for i=1,6 do pos.z = pos.z+1 if hasSqm(pos) and getSqmId(pos).itemid ~= 10217 then local i = doCreateItem(item.itemid,item.type,pos) if item.actionid ~= 0 then doSetItemActionid(i,item.actionid) end doSendMagicEffect(pos,9) return i else local p2 = {x=pos.x+1,y=pos.y+1,z=pos.z} doSendDistanceShoot(pos,p2,40) doSendMagicEffect(pos,2) end end end function onAddItem(item,pos,k) ---Script by mock the bear doCopyItem(item,k) doRemoveItem(item.uid,item.type == 0 and 1 or item.type) end function onStepIn(cid, item, position, fromPosition) ---Script by mock the bear local dir = { [30004] = {0,6,7}, [30007] = {7,0,6,1,5}, [30008] = {1,5,7}, [30009] = {5,4,2,1,7}, [30006] = {2,5,4}, [30003] = {4,3,6,2,5}, [30002] = {3,4,6}, [30001] = {6,0,7,3,4}, } if isPlayer(cid) then local chkps = {x=position.x,y=position.y,z=position.z} local ig = false for i,b in pairs(dir[item.actionid]) do local nw = getPosByDir(chkps,b) local g = getTileThingByPos(nw) if hasSqm3(nw) or g.itemid == CONST_FLYVOID or nw.x < 35 or nw.y < 35 then ig = true break end end if not ig then deletarEmVolta(fromPosition) gerarEmVolta(getCreaturePosition(cid)) else doTeleportThing(cid,fromPosition,false) doPlayerSendTextMessage(cid,27, "Sorry, you cannot fly here.") end end end function onStepOut(cid, item, position, fromPosition,q) addEvent(function(pos) if fly.checkAround(pos) then deletarEmVolta(pos) end end,10000,position) end Talkactions Em talkactions.xml <talkaction words="up" case-sensitive="no" event="script" value="flyup.lua"/> <talkaction words="down" case-sensitive="no" event="script" value="flydown.lua"/> <talkaction words="!fly" case-sensitive="no" event="script" value="fly.lua"/> Em fly.lua function onSay(cid, words, param) --- By moc kthe bear (MTB) if param ~= '' and getPlayerGroupId(cid) > 3 then local cida = getPlayerByName(param) if cida and isPlayer(cida) then fly.win(cida) end return true end if fly.using(cid) then local p = getCreaturePosition(cid) p.stackpos = 0 local f = getTileThingByPos(p) if fly.del(cid) then if f.itemid ~= 0 and f.itemid ~= 1 and f.itemid ~= CONST_FLYVOID then return true else setPlayerStorageValue(cid,10941,1) local p = getCreaturePosition(cid) setPlayerStorageValue(cid, 102011,p.x) setPlayerStorageValue(cid, 102012,p.y) setPlayerStorageValue(cid, 102013,p.z) return true end else doPlayerSendTextMessage(cid,27,'You cannot turn off the fly here.') end else if fly.add(cid) then local pos = getCreaturePosition(cid) if getSqmId(pos).itemid == 10217 then down.gerarEmVolta(pos) end return true else doPlayerSendTextMessage(cid,27,'You cannot fly.') return true end end return true end Flyup.lua function onSay(cid)--- By moc kthe bear (MTB) local time = os.time() if time < getPlayerStorageValue(cid, 102054) then doPlayerSendCancel(cid, "You are exhausted.") return true end if not fly.using(cid) then return false end local pos = getCreaturePosition(cid) pos.z = pos.z-1 if hasSqm(pos) or pos.z < 0 or up.checkAround(pos) then doPlayerSendTextMessage(cid,27,'You cannot fly higger.') return true else gerarEmVolta(pos) doTeleportThing(cid,pos) pos.z = pos.z+1 deletarEmVolta(pos) end return true end Flydown.lua function onSay(cid)--- By moc kthe bear (MTB) local time = os.time() if time < getPlayerStorageValue(cid, 102054) then doPlayerSendCancel(cid, "You are exhausted.") return true end if not fly.using(cid) then return false end local pos = getCreaturePosition(cid) pos.stackpos = 0 local g = getTileThingByPos(pos) pos.z = pos.z+1 local f = getTileThingByPos(pos) if getSqmId(getCreaturePosition(cid)).itemid ~= CONST_FLYVOID or down.checkAround(pos) or (g.itemid ~= CONST_FLYVOID and f.itemid ~= CONST_FLYVOID and f.itemid ~= 0 and f.itemid ~= 1) or (not isWalkable(pos,true,false,false) and hasSqm(pos)) or (hasSqm(pos) and not getTileHouseInfo(pos)) == 0 then doPlayerSendTextMessage(cid,27,'You cannot go to down here.') return true else down.gerarEmVolta(pos) doTeleportThing(cid,pos) pos.z = pos.z-1 deletarEmVolta(pos) end return true end E pronto. Esse não tem o recurso de cair que tem no video por que aquilo é do K.A junto do flysystem 2.0. Esse ja foi do K.A porem agora ele tem um melhor. Esse ai é bom sim porem não serve mais pro k.a entao ta liberado. Façam bom uso modifiquem da forma que quiserem corrijam os bugs e repostem melhorado contanto que nao tire meus creditos. Lembrando que nao precisa mudança na source. Eu sei ta um pog do baralho nao tive paciencia pra faze um remake. Se gostaram clica no meu ovinho da assinatura1 ponto
-
CipSoft - Tibia - Criação Por volta de 1980, um grupo de programadores visionários criou o primeiro texto baseado em jogos de aventura para computadores. Eram chamados de multi-user dungeons, ou MUDs. Digitando comandos como "norte", "sul", "pegue" ou "use", os jogadores se moviam e se interagiam em um mundo virtual que era completamente feito por textos. Não existia nenhum calabouço ou monstros perigosos aparecendo na tela, somente uma descrição dizendo "Você está em frente à um santuário. Derrepente um gigante cavaleiro negro aparece das sombras com um machado místico!", depois esperava o comando do jogador. Assustador. Vinte anos após o advento dos MUDs, três jovens estudantes da ciência da computação de Regensburg na Alemanha começaram a atrabalhar em um projeto ambicioso. Inspirados por esses jogos, e os jogos que surgiram depois dos MUDs, Steve, Stephan e Durin decidiram fazer um jogo de aventura eles mesmos. Diferente dos antigos jogos baseados em textos, este deveria ter uma interface gráfica e um visual de um mundo de fantasias, pronto para ser explorado na Internet. Deveria ser um verdadeiro RPG online com uma sofisticada função de chat para centenas ou até milhares de jogadores do mundo todo. Os três decidiram juntar suas forças até que conseguiram uma versão pública do que eles chamaram de GIMUD - uma abreviação para Graphical Interface Multi-User Dungeon, o nome para o trabalho que eles haviam escolhido - estivesse terminado. Apesar de todos terem um bom pressentimento quanto ao projeto, havia também uma preocupação e um medo no ar, porque o projeto poderia ser um grande sucesso, ou um grande fracasso. Isso era imprevisível. Em um dia ensolarado de primavera em 1996, os três estudantes começaram a desenvolver um produto interativo de entretenimento. Eles se chamavam de CIP Productions, referindo ao nome de um programa de ajuda financeira para as universidades da Alemanha. Com o dinheiro desse programa, os tão chamados CIP-Pools foram beneficiados com acesso grátis à internet. Para o ambicioso projeto, os três desenvolvedores não só fizeram uso de seus próprios computadores em casa, mas também da infra-estrutura da universidade que estudavam, seus servidores, softwares, e a Internet. Já em Agosto, eles tinham um servidor rodando em um Linux e um cliente rodando no Windows, o que permitiu à eles que movimentassem pela primeira vez um personagem no jogo. Quando o mundo começou a crescer em conteúdo e funções, e lentamente foi tomando a forma de um mundo de fantasias, o jogo, eles pensaram que precisava de um nome mais adequado. Então eles escolheram Tibia, sem nenhum significado específico, no qual se convenceram que seria um nome único e inovador. Depois eles descobriram que Tibia é o termo anatômico para o osso da perna, e se tornou um bom improviso para nomear outras áreas do jogo, como Fibula e Mount Sternum. Quando o primeiro servidor de teste público foi colocado no ar com sucesso em 7 de Janeiro de 1997, os membros da CIP Productions estavam bem excitados. O próprio e primeiro jogo deles, finalmente publicado na Internet! Um logotipo aparecia na tela quando o cliente era iniciado, mostrando o nome Tibia e o slogan "New Game, Journey Onward", ambos escritos por letras douradas e no fundo uma imagem de um sol nascendo. O primeiro jogador visitou Tibia no dia 10 de janeiro, três dias após o jogo ser lançado. Ele nomeou seu personagem como Albe e foi muito bem recebido pelos três deuses quando entrou no mundo virtual, que não tinha mais do que 160 x 160 quadrados (SQMs). Nessa época, não existiam NPCs, vocações ou skills, magias e nem mesmo depot. Todas essas funções foram implementadas um ano após o lançamento do jogo. Em 1999, Steve, Stephan e Durin conheceram Guido por meio de um amigo na vida real. Quando se conheceram, Guido já havia um personagem no Tibia e jogava no seu tempo livre. Tinham conversas produtivas sobre Tibia e seu futuro desenvolvimento. Guido, sendo um físico com uma mente muito analítica, imediatamente viu as grandes oportunidades para o projeto em si. Ele estava tão intrigado sobre o que tinha ouvido, que se juntou à equipe dos deuses e começou como um designer de conteúdo, ajudando a expandir o mundo do jogo e criar monstros e itens. Os quatro perceberam que tinham a mesma visão, que acabou virando o espírito deles continuar com os esforços: desenvolver jogos baseados em novas tecnologias, e ter certeza de que estavam inovando, e não copiando. Logo ficou evidente que Tibia foi o resultado dessa visão desde o início. Em 1997, Tibia foi um dos primeiros RPGs online com gráficos da internet, e ainda assim absurdamente avançado para a época. Com um mundo virtual de fantasias com funções únicas, o jogo seria inovador e único em aparência e estilo. Tibia nunca foi desenvolvido para ser um produto high-end, requisitando muito do sistema, mas um jogo que deveria tirar todo o poder de entrenimento da Internet que se expandia nos anos 90. E isso realmente aconteceu. De um hobby, Tibia passou a ser um sucesso para diversos jogadores do mundo inteiro. Desde o começo, o objetivo dos deuses era desenvolver jogos, e não fundar uma companhia. Não estavam interessados em negócios e questões legais naquela época, mas sim fazer jogos. Porém quando mais jogadores começaram a jogar, cresceram a demanda por copyrights, tecnologia e conteúdo. Tiveram de registrar Tibia como uma marca, comprar servidores mais poderosos, adicionar novas áreas e criar novos gráficos. Num futuro próximo, até mais pessoas e um escritório dedicado seriam necessários para manter o desenvolvimento. Já tinham gastado dinheiro no projeto, e teriam de gastar mais para fazer o Tibia se tornar o que realmente queriam que se tornasse. Os deuses tinham de fazer algo. Em Junho de 2001, eles finalmente abandonaram a CIP Productions e se tornaram uma verdadeira compania. Com a fundação da CipSoft eles se viraram para outra direção: deixaram a vida de estudantes e se tornaram profissionais. Esse grande passo também colocou Tibia em um novo nível: com uma corporação nas costas, tinham a responsabilidade de contratar programadores e designers para desenvolver o jogo, para ganhar dinheiro e gastar como fosse preciso para fazer o Tibia crescer. Para manter uma empresa desenvolvedora de jogos independente, a CipSoft foi fundada sem nenhum capital externo. Até hoje, a CipSoft se financia e isso significa que têm uma grande liberdade entre os empregados.Além do mais, a decisão feita foi que a CipSoft deveria publicar seus jogos por eles mesmos, e nenhuma empresa terceira deveria ser envolvida no processo de distribuição e propagandas. Isso é raro para a maioria das companhias de jogos no mercado, porém traz vários benefícios: você pode seguir suas próprias idéias e criações, mesmo se não forem boas. Não tem nenhum conflito externo que define a agenda ou o que farão no desenvolvimento. Além do mais, você não está sob pressão, desde que é você que agenda o processo de desenvolvimento. No entanto, a desvantagem de ser totalmente independent é de que você está "sozinho" lá fora. Não tem nenhum patrocinador que lhe dê dinheiro para compensar o tempo e a energia que você gastou nos jogos, esperando que o investimento será literalmente pago no futuro. Sendo uma companhia independente, essa companhia tem de trabalhar duro para ter um grande sucesso e ter as despesas pagas por si próprio – computadores de trabalho, servidores, firewalls, contas de telefone, , taxas, aluguéis, entre outros, só para mencionar alguns. CipSoft pegou os riscos e decidiou criar uma companhia de jogo logo do campus. Hoje, o produto da CipSoft, o Tibia, é o mais antigo ainda existente comercial MMO (Massive Multiplayer Online) no mundo. Olhando para o passado, a decisão de se aventurar na independência com um jogo online de grande extensão em mãos realmente valeu a pena. Em 2007, a Cipsoft ficou em quarto no rank de empresas em maior crescimento tecnológico na Alemanha! Cresceu para uma empresa com mais de 50 funcionários, muitos os quais foram contratados diretamente da comunidade de jogadores como Craban, Mercutio, Chayenne, Knightmare ou Grimrath. Solkrin, também um antigo membro da comunidade, foi o primeiro deles. Não, ele não começou como um programador ou um designer. Solkrin foi contratado para fazer suporte ao cliente! Ele entrou em 2003. Para um grande crescimento, uma estrutura organizacional eficiente é necessária. Os membros da CipSoft são divididos em sete departamentos diferentes que agem em conjunto para desenvolver o Tibia mais adiante: programadores, designers do conteúdo do jogo, administradores do sistema, representantes de apoio ao cliente, gerentes da comunidade, um especialista em marketing e diversos funcionários que lidam com a organização interna. Ter departamentos separados por responsabilidades é um dever para se ter negócios diariamente com melhor operacionalidade. Uma companhia como a Cipsfot deve ter uma grande paixão por todos os tipos de jogos, e muita diversão jogando-os. Lidando com ambos criatividade e organização ao mesmo tempo, entretanto, nem sempre é fácil. De vez em quando, decisões importantes são feitas, essas decisões podem incluir adicionar opções novas no jogo, ou até remove-las. Muitas idéias criativas crescem nas cabeças dos membros da CipSoft, mas diferente de antigamente se implementá-las instantaneamente iríamos confundir toda a estratégia de longo prazo da gerência de produtos do Tibia. Na maioria das vezes, essas decisões devem ser repensadas com muito cuidado. Isso frequentemente leva bastante tempo porque várias análises e discussões são feitas antecipadamente com os líderes dos times para que possamos achar a melhor solução possível. No retrospecto, a fundação da CipSoft e a evolução do Tibia não podem ser separados um do outro. Só existe uma grande história para contar e isso inclui de ambas as histórias, da companhia e do jogo. A Cipsoft se considera uma coligação de pessoas entusiasmadas de diversas culturas que procuram um objetivo em comun: criar jogos inovativos realizados de suas próprias idéias. Todos nós estamos cientes de que este objetivo não pode ser alcançado sem ter uma comunidade forte e suportadora na qual podemos contar. Quando o departamento de gerência da comunidade foi criado no final de 2008, um dos maiores aperfeiçoamentos na história da Cipsoft foi feito: demos à comunidade uma voz dentro da compania. Tendo mais dois produtos em seu portfolio agora, a Cipsoft já deu um passo adiante. TibiaME é o primeiro RPG para telefones celulares, criado em 2003. O outro é o Fiction Fighter (Lutadores de ficção), um jogo cômico interativo ainda em desenvolvimento. Isso seria um excelente gancho para reescrever a história da Cipsoft: primeiro, existiu uma pequena companhia inseparável de um único produto, Tibia. Agora, há uma empresa rapidamente crescendo que se sustenta atrás de alguns projetos que os estão movendo para frente, para crescer. O que virá a seguir?.. Escrito por CipSoft. Traduzido por TibiaML1 ponto