Líderes
-
-
xWhiteWolf
HéroiPontos3605Total de itens -
SuggestName
MembroPontos103Total de itens -
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 12/13/14 em todas áreas
-
[003] - Actions - Manuseando Parâmetros
[003] - Actions - Manuseando Parâmetros
Rofl e 3 outros reagiu a SuggestName por uma resposta no tópico
4 pontosBoa Noite pessoal, dando continuidade a série de tutoriais hoje eu venho trazer mais alguns exemplos de como podemos trabalhar com os parâmetros (position, lastposition, from position e toposition) só que agora em uma action simples. 1° Eu Criei uma função para verificar uma área pré-determinada a procura de creatures, e salva-las em um array. function getCreatureInArea(pos, area) local centro = {} local uids = {} for y = 1, table.getn(area) do for x = 1, table.getn(area[y]) do if area[y][x] > 0 then centro.x = math.floor(table.getn(area[y])/2)+1 centro.y = math.floor(table.getn(area) / 2 ) +1 local Cpos = { x = pos.x + x - centro.x, y = pos.y + y - centro.y, z = pos.z} if isCreature(getTopCreature(Cpos).uid) then table.insert(uids, getTopCreature(Cpos).uid) end end end end return uids end Nessa função eu entro dentro de um array e transformo ele em posições in-game, checo cada uma a procura de creatures que e guardo seu UID dentro de um outro array, e retorno ele no final do script. O Importante dentro dessa função é entender como eu transformo posições de um array em posições in-game, vamos analisar algumas coisas. 1° coisa é analisar a forma no qual o array é construído: local arr1 = { {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, } Esse é um array simples, cada par de chaves "{ }", corresponde a um elemento dentro do array, e cada numero um valor. 2° Coisa a ser feita e analisarmos o código Declaração do nome da função e seus parâmetros function getCreatureInArea(pos, area) Declaração do Array local centro = {} local uids = {} Cria-se um Laço ( for ) com uma variável "y" inicializada no 1, depois obtêm a quantidade de elementos ( Ou grupos de chaves "{ }" ) Da nossa área com a função ( table.getn() ) for y = 1, table.getn(area) do Cria-se um Laço ( for ) com uma variável "x" inicializada no 1, depois obtêm a quantidade de valores dentro do nosso elemento ( 1, 1, 1 ) com a função ( table.getn() ) for x = 1, table.getn(area[y]) do Cria um check ( if ) entrando dentro da área usando os valores obtidos no x e y, e verificando se os valores dentro da nossa área são maiores que 0 ( Para caso queira construir uma área aonde algumas posições não sejam verificadas ) if area[y][x] > 0 then [Exemplo de área aonde posições não seriam verificadas] : local arr1 = { {0, 1, 1, 1, 0}, {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {0, 1, 1, 1, 0}, } Define dentro de um novo atributo do array ( centro.x, centro.y ) e adiciona dentro dele a divisão exata ( Arredondado para baixo caso seja um numero quebrado ) da quantidade de elementos da nossa área, somando +1 no final centro.x = math.floor(table.getn(area[y])/2)+1 centro.y = math.floor(table.getn(area) / 2 ) +1 [Observação] : Caso não tenha entendido esse calculo ele é simples, a função ( math.floor ) arredonda um numero para baixo, a função ( table.getn(area[y]) ) retorna a quantidade de valores dentro do nosso elemento {1, 1, 1}, No total 3 valores, ai com o numero 3 ele divide por 2, 3 / 2 = 1.5, e some +1 ao resultado dessa divisão, 1.5 + 1 = 2.5, Lembrando que estamos usando a função math.floor e ela arredonda números quebrados para baixo 2.5 = 2 E o mesmo para o centro.y com uma diferença, ao invés de contarmos os valores dentro do elemento, contamos os próprios elementos ( table.getn(area) ) 1 = {1, 1, 1}, 2 = {1, 1, 1}, 3 = {1, 1, 1}, Que retorna o mesmo resultado "2". Agora Vamos transformas nossa área em posições no mapa local Cpos = { x = pos.x + x - centro.x, y = pos.y + y - centro.y, z = pos.z} Primeiro criamos um array de posições ( {x = ?, y = ?, z = ? } ), depois preenchemos os valores com um simples calculo: pos.x ( Essa é a posição de onde o item vai ser usado in-game ) + x ( Aquele x inicializado no for ) - centro.x ( Nosso calculo da soma e divisão dos valores dos elementos nas tabelas ), Bem, o x ( do for ) inicia em 1 , depois temos uma pos.x ( Posição in-game ) que assumiremos ser "1000", e nosso valor centro.x que sabemos ser 2. ( 1000 + 1 - 2 ) = 999 Então dentro do nosso array de posições podemos preencher o x com esse valor do mapa ( {x = 999, y = ?, z = ? } ) e a mesma coisa para o y ( OBS: o Z não é calculado no script pois é o mesmo que vem com a posição que é informada no parâmetro. ). Se você perceber, a unica variável que vai mudar é o x ( Do laço for ) que vai rodar 3 vezes ( Porque temos 3 valores dentro do nosso elemento ), 1° volta = ( 1000 + 1 - 2 ) = 999 2° volta = ( 1000 + 2 - 2 ) = 1000 3° volta = ( 1000 + 3 - 2 ) = 1001 Isso ja são 3 posições no mapa, agora esse código roda ( 3 vezes no x + 3 vezes no y ( No For ) ), 3x3 = 9, Então com esse nossa array de área conseguimos verificar 9 posições in-game. Essa é a verificação das creatures por posições no mapa geradas pelos nossos cálculos if isCreature(getTopCreature(Cpos).uid) then table.insert(uids, getTopCreature(Cpos).uid) end E esse é o retorno do array com os valores dos UID's encontrados pelos verificador de creatures return uids end Depois temos a parte do Action function onUse(cid, item, fromPosition, itemEx, toPosition) local arr1 = { {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, } doSendMagicEffect(toPosition, CONST_ME_MAGIC_RED) local creaturesArray = getCreatureInArea(toPosition, arr1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Creatures Detecteds: ".. table.getn(creaturesArray)) for k, v in pairs(creaturesArray) do doSendMagicEffect(getCreaturePosition(v), CONST_ME_HOLYDAMAGE) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Creatures Name: ".. getPlayerName(v)) end end Nesse script informamos a nossa área que verificaremos local arr1 = { {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, } Depois mandamos um efeito aonde o item foi usado doSendMagicEffect(toPosition, CONST_ME_MAGIC_RED) Usamos a função criada local creaturesArray = getCreatureInArea(toPosition, arr1) Preenchendo os 2 parâmetros ( toPosition = Posição de onde o item foi usado, arr1 = Nossa área ) Enviamos uma mensagem para o player com a quantidade total de creatures encontradas usando a função ( table.getn() ) para retornar a quantidade de elementos dentro do nosso array. doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Creatures Detecteds: ".. table.getn(creaturesArray)) Criamos um laço ( for ) Para rodar uma vez para cada creature encontrada for k, v in pairs(creaturesArray) do Enviamos um efeito de onde a creature foi encontrada, e uma mensagem para o player com o nome dela doSendMagicEffect(getCreaturePosition(v), CONST_ME_HOLYDAMAGE) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Creatures Name: ".. getPlayerName(v)) Essa é uma aula explicando como as posições podem ser exploradas, veja que com o toposition conseguimos criar uma área de verificações pre-definida e dar uma ação para essa área.4 pontos -
Sistema de Auto-Facing: Vire Automaticamente para o Target ao Atacar (TFS 0.3.6)
Sistema de Auto-Facing: Vire Automaticamente para o Target ao Atacar (TFS 0.3.6)
Orientalz e 2 outros reagiu a xWhiteWolf por uma resposta no tópico
3 pontosBom galera, tem uma coisa bem simples que nem o tibia global fez e que eu to trazendo aqui pra vocês. Trata-se de um pequeno sistema que fará você sempre virar pra direção do seu target ao atacar. Testado em TFS 0.3.6 Cliente 8.54. Imagem auto explicativa: Chega de atacar de costas! Agora pra instalar é bem tranquilo. Abra um arquivo .lua em data\creaturescripts\scripts chamado target e coloque o seguinte conteudo dentro dele: Feito isso adicione essa linha no creaturescripts.xml: <event type="attack" name="targetCreature" script="target.lua"/> E para finalizar adicione a seguinte tag em creaturescripts\scripts\login.lua: registerCreatureEvent(cid, "targetCreature") Espero que vcs tenham curtido, é algo bem simples mas ninguém havia pensado nisso antes (nem o próprio Tibia), é uma coisa bem básica e que torna o jogo bem mais importante e sério. EDIT:: Usem essa versão que está mais completa, na anterior se o target estivesse na diagonal ele não virava.3 pontos -
Mostrar o tempo da Magic Wall
Mostrar o tempo da Magic Wall
xlx e um outro reagiu a xWhiteWolf por uma resposta no tópico
2 pontosEae galera, hoje vou fazer uma pequena demonstração de como usar a função doShowTimeByPos, uma das mais novas funções adicionadas na New Lib, que agora está em versão 1.2. A função: Se seu server for 0.3.6/0.4 você só vai precisar adicionar essa linha marcada: do contrário, se ele for das revs mais novas como 1.0 você irá adicionar essa linha: Esses valores são a duração (20 segundos que é o tempo de duração da magic wall) e 20/35 é o TALKTYPE do tipo monster (cor laranja), seguindo a tabela do data\lib\constant.lua: TALKTYPE_FIRST = 1 TALKTYPE_WHISPER = 2 TALKTYPE_YELL = 3 TALKTYPE_PRIVATE_PN = 4 TALKTYPE_PRIVATE_NP = 5 TALKTYPE_PRIVATE = 6 TALKTYPE_CHANNEL_Y = 7 TALKTYPE_CHANNEL_W = 8 TALKTYPE_RVR_CHANNEL = 9 TALKTYPE_RVR_ANSWER = 10 TALKTYPE_RVR_CONTINUE = 11 TALKTYPE_BROADCAST = 12 TALKTYPE_CHANNEL_RN = 13 TALKTYPE_PRIVATE_RED = 14 TALKTYPE_CHANNEL_O = 15 TALKTYPE_CHANNEL_RA = 17 TALKTYPE_MONSTER = 19 TALKTYPE_MONSTER_YELL = 20 Aqui tem uma imagem de como fica no server. Note que eu fiz pra magic wall mas vale pra qualquer item que tenha duration, pra quests, pra contar tempo de invencibilidade de alguma spell ou oque você quiser, use a criatividade e explore o máximo dessa função. Abraços.2 pontos -
[PDA]Pokemon Whots 1.0
[PDA]Pokemon Whots 1.0
DarkRed e um outro reagiu a Drazyn1291 por uma resposta no tópico
2 pontosEaw Galera Hoje eu vim trazer meu servido de pokemon tibia chamado "Pokemon Whots" Oque ele tem? Rep+ System Comando de Correr Comando de !luz Comando de !afk Comando de !bug (voltar ao cp" Sistema de Anucio Ex: !anucio aeae galera. vai aparecer em verde [Anuncio]Seunick : aeae galera. Para todo Servido Entre Ooutros Sistemas Muitos Legais!!!!! Pokemon da 1 até 6 Geração (Incompleta) Arquivos imcompletos: Pokemons sem modificações no Configuration.lua Algums Bugs Facil de resolver mas estou sem tempo Scan : Cliente :https://www.virustotal.com/pt/file/31c2bc94a5a799f7ffeeec74d5844185f0693761e80cb192b9a8157f5d44b220/analysis/1412209567/ Servido : Não Conseguir Fazer Upload no Virus Total Download : Cliente : http://www.mediafire.com/download/iykh4y6uyr9xpzk/Client_Pxz.rar Servido : http://www.mediafire.com/download/vetcgsjartia38n/Pokemon_Whots.rar Creditos : Equipe Skyfall Pela Base Eu por editar Muitas Coisas Lucasmc Por Umas sprites como Iniciais de Kalos e Sprite de Meloetta Tibiaking Se Gostarem Dem Rep++ Vlw Se Gostarem Rep++2 pontos -
Como funciona a compra do Magebot ?
Como funciona a compra do Magebot ?
Andressi e um outro reagiu a Jose Peterson por uma resposta no tópico
2 pontosGalera alguém pode fazer um tutorial bem feito de passo a passo de como "comprar" keys do magebot? Eu to meio em duvida também por que no site tinha: 1 computer permanent license e 10 computer permanent license, nunca comprei só use o serial e tb nem sei onde clica pra comprar ... Se alguém puder fazer o tutorial em video seria melhor ou passar algum link que mostre certinho eu ficaria muito agradecido ! ~ OBS: NÃO ACHEI NENHUM TUTORIAL QUE MOSTRE COMO COMPRAR APENAS COMO CRAKEAR2 pontos -
(Resolvido)World Zerada
(Resolvido)World Zerada
CreatServer e um outro reagiu a Sullivan por uma resposta no tópico
2 pontosAbra o Remeres', segure CTRL e em seguida aperte a letra "n", e divirta-se2 pontos -
[8.54] Servidor + Client Naruto B&W [EXCLUSIVO]
OLÁ USUARIOS DO TIBIA KING .. HOJE ESTAREI TRAZENDO UMA NOVIDADE .. O SERVIDOR DE NTO EXCLUSIVO DO NTO BLACK & WHITE(AKELE OT NOVO QUE FOI CRIADO A 1 MES POR E MIN E POR O [ADM] Johnatan). VALE LEMBRAR QUE O NTO BLACK WHITE FOI UM DOS SERVIDORES DE NARUTIBIA QUE MAIS CRESCEU NOS ULTIMOS TEMPOS .. EM APENAS 1 SEMANA DE NTO JÁ ATINGIMOS A META DE 70 ~ 80 USUARIOS ONLINE FIXOS DIARIOS, E ESSE É O SERVIDOR MAIS RECENTE DO NTO BLACK WHITE BASEADO NO DO SERVIDOR MADARA RINNEGAN EDITADO POR MIN E POR O JOHNATA. ANTES DE MAIS NADA GOSTARIA DE EXPLICAR O MOTIVO DE TAR POSTANDO O SERVER .. BEM O JOHNATAN ERA QUEM FAZIA PRATICAMENTE TUDO NAS ATUALIZAÇÕES E TAALS .. POREM ELE PAROU COM NTO AI TIVE QUE DESMONTAR O NTO B&W PORQUE EU NÃO TINHA CONDIÇÕES PRA DAR CONTA DO NTO SOZINHO. CHEGA DE BLABLA E VAMOS LÁ!! [+] NOVIDADES & CARACTERISTICAS [+] ERROS E BUGS [+] PRINTS DO SERVER [+] DOWNLOAD [+] CREDITOS [+] NOVIDADES & CARACTERISTICAS [+] ERROS E BUGS [+] PRINTS DO SERVER [+] Downloads Servidor Naruto B&W: Clique Aqui Client(descompilado): Clique Aqui [+] Creditos - Madara Rinnegan (servidor base) - [ADM] Johnata Editar Praticamente Todo o Servidor - Eu Por umas Besteiras q eu Coloquei e Por Postar GOSTOU DO SERVIDOR? DA UM REP++1 ponto
-
Compilando com Microsoft Visual Studio 2013
Compilando com Microsoft Visual Studio 2013
OinomedRellik reagiu a Jepart por uma resposta no tópico
1 pontoProcurei um tutorial aqui no fórum que utiliza-se o Microsoft Visual Studio 2013 para complilar o OTC porem não achei então fui pra outro fórum e vim trazer para o TK 1.Download MSVC 2013 Libs - Aqui Source - Aqui 2.Agora que temos as source e libs está na hora de colocá-los nos lugares corretos. Coloque as "otclient-master" e "otclient-msvc13-libs" na "C:\" .Isto vai poupar muito tempo, porque você não tem que ligar manualmente todas as inclui e libs. 3.Abrindo o MSVC 2013 (Imagem de outro forum - dominique120) 4. Agora vamos configurar as propriedades 5. Agora selecione a configuração correta: 6. Agora, aqui ele pode ficar um pouco confuso, então preste atenção. 6.1 Se você extraiu as libs para o ? / drive você só precisa adicionar isso ao seu includes: E isso para as suas libs 6.2 Mas, se você extraiu os libs em outros lugares que você deve adicionar esses diretórios também. Isto é para o includes: Isto é para as libs: 6. Agora clique em Aplicar e deixar os arquivos analisar, isso é automático. 7. Uma vez que é você pode reconstruir os arquivos. 8. Construindo seu .exe . 9. Agora é só esperar termina e você vai ter seu .exe. 10. Caso precise das DLL basta baixar aqui. Créditos: @dominique120 - pelo tutorial @edubart - pelo desenvolvimento do OTC @Dalkon - por adicionar arquivos de compilação MSVC @conde2- por fixar-se a fonte de modo que seja compatível com o compilador do MSVC1 ponto -
[Pokemon Kpdo] Pokemon kpdo exaioros By Cater
[Pokemon Kpdo] Pokemon kpdo exaioros By Cater
Bruno Maciell reagiu a kpdo por uma resposta no tópico
1 pontoOlá caros amigos do forum estou aqui postando o pack completo do pokemon kpdo que atualmente se econtra online a 3 anos, eu sou o administrador do atual servidor pokemon kpdo, irei primeiramente falar o motivo de eu estar postando. Um dos meus EX-staffs roubou os arquivos que eu passei e resolveu vender a terceiros o que eu achei muito anti-ético então resolvi postar open source, pois o que o mesmo fez comigo foi muito errado então não restou a nao deixar gratuito para que o mesmo não lucre nas minha costa. Download: Client+Servidor: Mega Scan: O scan pega o client como um falso positivo por ter injeção de dll injection da barra do meu cliente porém vale lembrar que não tem virus, assim como o pack é um falso positivo. Link do Scan: VirusTotal Os sistemas que o jogo tem são: Sistema de som Cool down e poke bar. Duel System Tv Cam System Sistema de torneio Sistema de Duelos com aposta Pokemons da 1 até a 5 geração e seus devidos shinys. Sistema de shinys Muitas quests TM system etc. Creditos: Renan(Admin) Equipe staff kpdo atual e EX staffs; www.exaioros.com1 ponto -
[TUTORIAL] Resolvendo qualquer erro na data base
Opa, galerinha do TK, pro meu primeiro tutorial resolvi fazer uma solução de um problema que desde que cheguei no TK, vejo que ocorre com uma certa frequência. Os erros da data base. Neste tutorial vou ensinar a resolver os erros do tipo No such table, Insert into, No such column, ... has no column named... etc. 1°) NO SUCH TABLE Bom, para o erro No such table, basta vc visualizar qual table está faltando. Para isso basta ler o erro na distro: No caso da imagem, está faltando a table: player_statements Para resolver este e qualquer outro problema deste tipo, caso sua data base seja sqlite, basta abrir sua data base pelo Sqlite Studio(download: http://sqlitestudio.pl/?act=download) e clicar em Open SQL query editor: Mas caso sua data base seja Mysql abra pelo phpMyadmin, ou por outro editor de sua preferencia. 1.1°) EXECUTANDO OS COMANDOS PARA RESOLVER O PROBLEMA Bom, dependendo da table que estiver faltando, vc irá colocar seu respectivo comando, segue abaixo TODOS os comandos básicos necessários para que sua data base fique Ok! : (VC VAI PEGAR O COMANDO REFERENTE À TABLE QUE VC QUER!!!) account_viplist Sqlite accounts Sqlite bans Sqlite environment_killers Sqlite global_storage Sqlite guild_invites Sqlite guild_kills Sqlite guild_ranks Sqlite guild_wars Sqlite guilds Sqlite house_auctions Sqlite house_data Sqlite house_lists Sqlite houses Sqlite killers Sqlite market_history Sqlite market_offers Sqlite player_deaths Sqlite player_depotitems Sqlite player_inboxitems Sqlite player_items Sqlite player_killers Sqlite player_namelocks Sqlite player_skills Sqlite player_spells Sqlite player_statements Sqlite player_storage Sqlite player_viplist Sqlite players Sqlite server_config Sqlite server_motd Sqlite server_record Sqlite server_reports Sqlite tile_items Sqlite tile_store Sqlite tiles Sqlite announcements Sqlite pagsegurotransacoes Sqlite player_advances Sqlite reports Sqlite thanks Sqlite z_bug_logs Sqlite z_featured_article Sqlite z_forum Sqlite z_helpdesk Sqlite z_monsters Sqlite z_network_box Sqlite z_news_tickers Sqlite z_ots_comunication Sqlite z_polls Sqlite z_polls_answers Sqlite z_poll_votes Sqlite z_shop_history_item Sqlite z_shop_history_pacc Sqlite z_shop_offer Sqlite z_spells Sqlite z_news_big Sqlite 2°) No such column / "NOME DA TABLE" has no column named "NOME DA COLUMN QUE FALTA" / Insert into Bom, para resolver esse problema vc deve identificar em qual TABLE está essa coluna que falta. Para isso, basta ler o erro como na imagem: No caso da imagem, está faltando a column WORLD_ID dentro da table MARKET_OFFERS. Para resolver, vc deve executar excluir a sua table MARKET_OFFERS existante em sua data base, e em seguida, executar o domando da da market_offers, encontrado acima, logicamente isso só se aplica ao caso da imagem, depende do seu caso, vc deve excutar o comando da table que estiver sendo referida no erro. Mas antes de executá-lo vc deve excluir a sua table EXISTENTE, para então executar o comando. ESTA FORMA DE RESOLUÇÃO SE APLICA AOS TRÊS CASOS: NO SUCH COLUMN, ...HAS NO COLUMN NAMED... e INSERT INTO. Bom galera, é isso. SE ENCONTRAREM, OU SE DEPARAREM COM ALGUM ERRO, BASTA ME PEDIR AJUDA QUE EU DAREI TOTAL SUPORTE PARA VOCÊS! SE ESTIVR FALTANDO MAIS ALGUMA TABLE QUE EU NÃO COLOQUEI AQUI, PF ME INFORMEM E EU ATUALIZAREI O TÓPICO!!! Lembrem-se, se eu te ajudei, por favor, deem REP++ pois foi meio trabolhoso fazer este tutorial todo... ESTOU A DISPOSIÇÃO DE TODOS! Tanto por PM quanto por SKYPE, e até mesmo por aqui, pois vou checar este tópico regularmente!! Espero ter ajudado!! Abraços.1 ponto
-
Aulas de Scripting Lua
Aulas de Scripting Lua
unf4ced reagiu a MaXwEllDeN por uma resposta no tópico
1 pontoQuer aprender a programar em Lua? Sugiro que você comece olhando esses tutoriais escritos por Urso Mock, Suricato Notorious e Raposa Skyen Hasus. Já leu todas as aulas anteriores e acha que você já está apto a criar seus próprios Scripts? Boa! Agora é hora de por suas habilidades em prática. Leia esses tutoriais: Outros Tutoriais: Avançado:1 ponto -
{Projeto}-Pokémon Conquest
{Projeto}-Pokémon Conquest
MatthewKreuz reagiu a Lord Stryton por uma resposta no tópico
1 pontoPokémon Conquest [informações] [base] [Projeto] [sistemas] Pokémon Conquest; Criado desde 05/09/2012.Passamos um bom tempo com o server parado fizemos uma pequena atualização e passamos para nosso programador dono do pokémon Sky Line que agora ele e um dos donos do pokémon conquest.Já fui Ot Admin, Script e Editor Web. infelizmente acabei abandonando a vida de Ot Admin, ainda durante um tempo relutei em não abandonar e tentei ajudar todos no TK, mas infelizmente, não tive mais tempo para isso, mas devo admitir que toda experiência que eu realmente obtive sendo um Ot Admin me serviu como uma luva na vida profissional. Base Pokémon Conquest; Nossa base foi recriada a partir de uma TFS 0.3.6 bastante antiga, porém mudamos bastante funções para torna-la com quase 0% de crash. Fizemos uma grande reformulação com o servidor usando alguns scripts que foram adaptados com servidor. Contamos com um Programado (Amador) que conseguiu fazer alguns sistemas parecidos com o da PxG e do antigo Pokestorm. Projeto Conquest Level System Gender System 1° á 2° Completa com os Respectivos Shinys Box inicial Lvl 30-(Quest) Pokémons Iniciais (Rattata,Weedle,Cartepie,Pichu) cath com pokeball: PokeBola:(1x). Rate GreatBola:(2X). Rate SuperBola:(3x). Rate UltraBola:(4x). Rate SafariBola:(Depende do Pokémon do Safari) Pokebola Negra:(6x). Rate-[Pokemon dark e Fantasma] PokeBola Escura:(6x). Rate-[Pokemons Escuridão] Servidor em Português Game-Chat.(PT),(ENG),(ESP) Trade Traduzido-Shop Center.(PT),(ENG),(ESP) Distro 90%Limpa Sem Lag até 240 Players Mapa próprio com as regiões: Sistemas Trabalhamos muito nessa parte e agradecemos ao TibiaKing por alguns Sistemas e a Otland por algumas Extend Opcodes. Temos Sistemas atualizados e melhorado: Login System: Sua última visita foi em Novembro,Quarta-Feira (28) 20:25:25 2014. Bem vindo ao Pokémon Conquest! Você possui 0 Conquista(s) depositado(s). Look System: Está é a pokébola de Charizard. [HP: 8152/8152] - [sexo: M] [Level: 61] - [boost: +0] - [Vit: Vazio] - [P.F: 0] (PF-Pedra de Força) Pedra de Força: Faz com que o Poke egg nasça mais forte por exemplo: Está é a pokébola de Charizard. [HP: 8152/8152] - [sexo: M] [Level: 61] - [boost: +0] - [Vit: Vazio] - [P.F: 15] (15 divido por 2 = 7,5%+Forte) Defense System: Esse sistema é bem simples, consiste em um sistema que ignora o ataque do oponente dependendo do nível de defense. Sim, sei que o próprio poketibia já tem um sistema desse, isso torna as coisas mais emocionantes. O Pokémon tem 20 % de chance máxima de defender o próximo ataque em área. House: Esse sistema vai ajudar e muito aqueles que sofrem com players inativos, ele basicamente remove a casa do player que estiver inativo por 20 dias. Desse jeito,Players que não conseguem comprar uma house por causa de algum Player inativo esse Sistema vai Ajudar muito. Evolution System Seu pokémon Haunter avançou do level 59 para o level 60. (Com Botão Evolutivo) Pesca: Trabalhei muito pra tentar fazer isso: (Print retirada do Pokebro pois a nossa contém sprites de Teste) Novo Sistema.Respectivamente: -Velha Rod -Nova Rod -Super Rod -Profissional Rod Addon System: Em breve Prints: Novo addon System. Atualizamos e deu certo, assim que o Pokémon se transformar dependendo de sua Outfit ele pode aumentar seus status. EX: Machamp usou Addon Fight, Seu ATK e Speed aumentau em 2%. Prints? Remakes Visite Nossa Pagina: (https://www.facebook.com/PokemonConquestt) Interessados? Manda um PM pela Pagina e eu Entrarei em contato.1 ponto -
Callbacks de creaturescripts
Callbacks de creaturescripts
Agaka reagiu a xWhiteWolf por uma resposta no tópico
1 pontoFala galera do TK, hoje eu vim trazer pra vocês uma coisa que se perdeu em todos esses anos de OT e que é uma das coisas mais importantes prum scripter intermediário/avançado. São as explicações dos respectivos callbacks de creaturescripts. Espero que ajude bastante gente Créditos: 90% Zonnebloem (um gringo ai que postou isso das sources) e 10% pra mim por completar oque ele não tinha escrito e arrumado umas coisas que ele escreveu errado. ____________________________ CREATURE EVENTS TIPOS: _________________ TFS 0.2 type="login" function onLogin(cid) type="logout" function onLogout(cid) type="advance" function onAdvance(cid, skill, oldLevel, newLevel) type="think" function onThink(cid, interval) type="kill" function onKill(cid, target) type="death" function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified) type="preparedeath" function onPrepareDeath(cid, killer) TFS 0.3/0.4 type="login" function onLogin(cid) type="logout" function onLogout(cid) type="advance" function onAdvance(cid, skill, oldLevel, newLevel) type="think" function onThink(cid, interval) type="kill" function onKill(cid, target, lastHit) type="death" function onDeath(cid, corpse, deathList) type="preparedeath" function onPrepareDeath(cid, deathList) type="statschange" function onStatsChange(cid, attacker, type, combat, value) type="combat" function onCombat(cid, target) type="target" function onTarget(cid, target) type="look" function onLook(cid, thing, position, lookDistance) type="textedit" function onTextEdit(cid, item, newText) type="outfit" function onOutfit(cid, old, current) type="push" function onPush(cid, target) type="follow" function onFollow(cid, target) type="attack" function onAttack(cid, target) type="areacombat" function onAreaCombat(cid, tileItem, tilePosition, isAggressive) type="cast" function onCast(cid, target) type="direction" function onDirection(cid, old, current) type="reportbug" function onReportBug(cid, comment) type="sendmail" function onSendMail(cid, receiver, item, openBox) type="receivemail" function onReceiveMail(cid, sender, item, openBox) type="traderequest" function onTradeRequest(cid, target, item) type="tradeaccept" function onTradeAccept(cid, target, item, targetItem) type="joinchannel" function onJoinChannel(cid, channel, users) type="leavechannel" function onLeaveChannel(cid, channel, users) TFS 1.0 type="login" function onLogin(cid) type="logout" function onLogout(cid) type="think" function onThink(cid, interval) type="preparedeath" function onPrepareDeath(cid, killer) type="death" function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified) type="kill" function onKill(cid, target) type="advance" function onAdvance(cid, skill, oldLevel, newLevel) type="modalwindow" function onModalWindow(cid, modalWindowId, buttonId, choiceId) type="textedit" function onTextEdit(cid, item, text) type="changehealth" function onChangeHealth(cid, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType) type="changemana" function onChangeMana(cid, attacker, manaChange) type="extendedopcode" function onExtendedOpcode(cid, opcode, buffer) ____________________________ INFORMAÇÃO SOBRE OS TIPOS: _________________ antes de tudo tenha em mente que os tipos só serão executados no player ou monstro em que eles forem registrados; Registrar no login.lua vai fazer com que ele seja executado em todos os players assim q eles logarem. Se deve ser executado somente por alguns monstros, registre no monstro em questão no xml dele. login Quando é executada: - Quando um player loga Parametros: - cid = creatureid do player que logou quando está return false: - nada registra creature event: - não ~~~~ logout Quando é executada: - quando um player desloga pelo logout do próprio cliente. Não acontece se o player morrer, for disconectado ou xlogs Parametros: - cid = creatureid do player que deslogou quando está return false: - Player não vai conseguir deslogar registra creature event: - não ~~~~ advance Quando é executado: - Toda vez que um player avançar de level, magic level ou qualquer outra skill Parametros: - cid = creature id do player que avançou - skill = tipo da skill que o player avançou vide tabela abaixo (note que vc pode utilizar tanto o nome SKILL_FIST quanto o numero 0) SKILL_FIST = 0 SKILL_CLUB = 1 SKILL_SWORD = 2 SKILL_AXE = 3 SKILL_DISTANCE = 4 SKILL_SHIELD = 5 SKILL_FISHING = 6 SKILL__MAGLEVEL = 7 SKILL__LEVEL = 8 - oldlevel = level antes do player avançar - newlevel = o novo level após avançar quando está return false: - ele não vai avançar o nível Registra creature event: - sim (isso significa que vc pode colocar pra ele registrar um outro creatureevent dentro desse script após alcançar X level) ~~~~ think Quando é executada: - Pelo tempo Parametros: - cid = creatureid do monstro ou player - interval = intervalo entre cada checagem OU em que intervalo deve ser executada, 500 é 0.5 segundo. quando está return false: - nada Registra creature event: - sim ~~~~ kill Quando é executada: - Ao matar um player/monstro Parametros: - cid = creatureid do player ou do monstro que mata - target = creatureid do player ou monstro que é morto quando está return false: - O target não morrerá, ele ficará com 0 de vida e a barra sumirá para os inimigos.Ele precisará se curar para que sua barra de vida volte registra creature event: -sim ~~~~ death Quando é executada: - Quando um player ou monstro morrem Parametros: - cid = creatureid do player monstro que morre - corpse = corpo do monstro ou player que morre exemplo de adicionando 3 crystal coins no corpo que morreu. doAddContainerItem(corpse.uid, 2160, 3) - deathlist = uma table com o nome de todos que mataram, sendo na ordem o deathlist[1] oque deu o ultimo hit e o deathlist[2] sendo oque deu mais dano. quando está return false: - O corpo não será criado Registra creature event: - Sim ~~~~ preparedeath Quando é executada: - Quando um monstro ou player está prestes a morrer (pode ser usada em scripts que devem ser executados no segundo antes do player morrer) Parameters: - cid = creatureid do player ou monstro que está prestes a morrer - deathlist = uma tabela com o nome dos atacantes quando está return false: - o player ou monstro não irá morrer (mesma história do kill) Registra creature event: - Sim ~~~~ statschange quando é executada: -Quando um player ou monstro ou ganha ou perde vida/mana de um combat ou uma função (combats não são só os das spells, mas também weapons/fist/melee... vale lembrar também que monstros não possuem mana) Parametros: - cid = creatureid do player ou monstro q ganha/perde vida/mana - attacker = creatureid do player ou monstro que causou a mudança na health/mana - type = tipo da mudança, sendo ela:Ganho de vida, perca de vida, ganho de mana e perca de mana vide tabela abaixo: STATSCHANGE_HEALTHGAIN = 0 STATSCHANGE_HEALTHLOSS = 1 STATSCHANGE_MANAGAIN = 2 STATSCHANGE_MANALOSS = 3 - combat = o tipo de combat que causou a alteração, sendo esses tipos: COMBAT_NONE = 0 COMBAT_PHYSICALDAMAGE = 1 COMBAT_ENERGYDAMAGE = 2 COMBAT_EARTHDAMAGE = 4 COMBAT_POISONDAMAGE = 4 COMBAT_FIREDAMAGE = 8 COMBAT_UNDEFINEDDAMAGE = 16 COMBAT_LIFEDRAIN = 32 COMBAT_MANADRAIN = 64 COMBAT_HEALING = 128 COMBAT_DROWNDAMAGE = 256 COMBAT_ICEDAMAGE = 512 COMBAT_HOLYDAMAGE = 1024 COMBAT_DEATHDAMAGE = 2048 - value = valor da mudança quando está return false: - O player ou o monstro não ganharão/perderão vida/mana no combat. Pode ser usado pra fazer ele ficar imortal por um certo período ou não ser capaz de tomar dano de certos players/creaturas Registra creature event: - Sim ~~~~ combat Quando é executado: - Quando um player ou monstro starta um combat (qualquer tipo de ataque) Parametros: - cid = creatureid do player ou monstro que usa o combat - target = creatureid do player ou monstro que sofre o combat quando está return false: - O player ou monstro não será capaz de levar ataques, isso também inclui que ele não poderá dar target em alguém/algo . Isso pode ser usado para criar monstros que não possam levar ataques ou fazer players ficarem imunes a dano por um certo tempo. Registra creature event: - Sim _______________________________________________________________________________________________ Agora começa a graça da coisa: ~~~~ target Quando é executado: - Quando um player ou monstro dá target em um player/mostro (follow/attack) Parametros: - cid = creatureid do player ou monstro que dá o target - target = creatureid do player ou monstro que é targeted quando está return false: - O player/monstro não poderá dar target.. alguns testes com monstros revelaram que o monstro ainda consegue te atacar então acho que essa função só serve para player Registra creature event: - Sim ~~~~ look Quando é executado: - Quando um player dá look em algo Parametros: - cid = creatureid do player que dá o look - thing = objeto/player/monstro que o player dá look - position = não tenho certeza se é a posição do objeto que é dado look ou se é a minha posição. - lookDistance = distancia entre esse objeto e eu. quando está return false: - Não aparece a mensagem de look na tela Registra creature event: - Sim ~~~~ textedit Quando é executado: - Quando um player edita um texto em algum item writeable (livros por exemplos) Parametros: - cid = creatureid do player - item = item que está sendo modificiado - newText = texto novo que foi escrito quando está return false: - O player não conseguirá editar o texto, quando ele tentar dar ok o item continuará com o mesmo texto.. Pode ser usado numa quest com muito RPG pra checar se a senha que o player escreveu no livro é a correta. Registra creature event: - sim ~~~~ outfit Quando é executado: - Quando um player ou monstro muda de outfit Parametros: - cid = creatureid do player ou monstro que muda de outfit - old = outfit antiga - current = outfit atual (após ter trocado) quando está return false: - a troca de outfit será cancelada e o player/monstro voltará para a antiga outfit Registra creature event: - sim ~~~~ push Quando é executado: - Quando um player tenta empurrar um monstro ou um player Parametros: - cid = creatureid do player que empurrar - target = creatureid do player ou monstro que é empurrado quando está return false: - O player não conseguirá empurrar (arrastar o oponente com o mouse). É bastante util em eventos para que eles não possam ficar se empurrando Registra creature event: - sim ~~~~ follow Quando é executado: - Quando um player dá follow em algum monstro ou player ou até num NPC Parametros: - cid = creatureid do player que dá o follow - target = creatureid da criatura (monstro/npc/player) que é seguida quando está return false: - O follow não irá ocorrer Registra creature event: - Sim ~~~~ attack Quando é executado: - Quando um player ou monstro ataca (melee, spells não contam) Parametros: - cid = creatureid do player ou monstro que ataca - target = creatureid do player ou monstrp que sofre o ataque quando está return false: - O player/monstro não irá atacar, é bastante útil em sistemas que vc queira deixar uma certa criatura imune a ataques mas que ela ainda possa morrer pra spells Registra creature event: - Sim ~~~~ areacombat Quando é executado: - Quando um player ou monstro starta um combat em área (usa uma spell ou dano em área) Parametros: - cid = creatureid do player ou monstro que usa o combat - tileItem = player que está dentro da area - tilePosition = posição do player que está dentro da area - isAggressive = se esse combat em área é agressivo ou não, lembre-se que magias como exura gran mas res fazem combat em área mas esse combat não é agressivo porque ela cura em área quando está return false: - o combat é cancelado Registra creature event: - Sim ~~~~ cast Quando é executado: - Quando um player ou monstro solta uma magia Parametros: - cid = creatureid do player ou monstro que usa a magia - target = creatureid do player ou monstro que sofre o dano da magia quando está return false: - a magia não é lançada Registra creature event: - sim ~~~~ direction Quando é executado: - Quando uma criatura (NPC/Player/Monster) muda de direção Parametros: - cid = creatureid do player ou monstro que mudará de direção - old = direção antiga - current = direção atual, após ter mudado, vide tabela abaixo: NORTH = 0EAST = 1 SOUTH = 2 WEST = 3 SOUTHWEST = 4 SOUTHEAST = 5 NORTHWEST = 6 NORTHEAST = 7 atente-se no fato de que não é possível virar pras direções 4,5,6 e 7 mas você utilizá-las num script que cheque a direção entre dois players, daí sim seria possível (como é no caso do exiva) quando está return false: - A criatura não será capaz de mudar de direção Registra creature event: - Sim ~~~~ reportbug Quando é executado: - Quando um player reporta um bug Parametros: - cid = creatureid do player que reportou o bug - comment = comentário que ele adicionou ao reportar quando está return false: - O report será cancelado e não será enviado. Pode ser usado num script avançado de reports onde se o player não tiver escrito nenhum comentário ou tiver escrito determinadas palavras o envio será cancelado (pra evitar spams) Registra creature event: - Sim ~~~~ sendmail Quando é executado: - Quando um player manda uma carta/parcel para outro Parametros: - cid = creatureid do player que mandou a correspondencia - receiver = creatureid do player que irá receber essa correspondencia - item = item que foi enviado (id dele) - openBox = conteúdo (no caso de parcel) quando está return false: - Correspondência não será enviada. É util pra registrar um log de todas as trocas entre players e pegar hackers. Registra creature event: - Sim ~~~~ receivemail Quando é executado: - Quando um player recebe uma carta/parcel de outro Parametros: - cid = creatureid do player que recebou a correspondência - sender = creatureid do player que enviou a correspondência - item = item recebido - openBox = conteúdo da correspondencia (no caso de ser uma parcel) quando está return false: - Ele não receberá a correspondência. Registra creature event: - Sim ~~~~ traderequest Quando é executado: - Quando um player dá trade Parametros: - cid = creatureid do player que deu o trade - target = creatureid do player que ele tentou iniciar uma troca - item = item que foi iniciada a troca (se for uma backpack cheia de coisas dentro esse item será uma table com todos os itens) quando está return false: - A troca não será executada. É útil para scripts de itens vip onde o player não possa trocar determinados itens Registra creature event: - Sim ~~~~ tradeaccept Quando é executado: - Quando um player aceita a troca com outro) Parametros: - cid = creatureid do player que aceitou a troca (você) - target = creatureid do player que aceitou a troca (cara com quem você trocou) - item = items que você deu em troca, no caso de uma backpack cheia de itens esse parametro será uma table com todos os itens - targetItem = items que você recebeu em troca, no caso de uma backpack cheia de itens esse parametro será uma table com todos os itens quando está return false: - a troca não será concluída. Registra creature event: - Sim ~~~~ joinchannel Quando é executado: - Quando um player entra num channel (aqueles canais tipo trade/ help chat/ info/ guild/ etc...) Parametros: - cid = creatureid do player que entrou no chat - channel = canal que o player entrou.. vide lista abaixo: CHANNEL_GUILD = 0 CHANNEL_PARTY = 1 CHANNEL_RVR = 3 CHANNEL_HELP = 9 CHANNEL_DEFAULT = 0xFFFE CHANNEL_PRIVATE = 0xFFFF - users = outros usuários do canal. quando está return false: - O player não conseguirá entrar no channel Registra creature event: - Sim OBS: a mesma coisa vale pra função leavechannel, só que o return false o player não conseguirá sair do channel. Espero que isso ajude bastante gente, eu não expliquei os types da versão 1.0 porque é basicamente a mesma coisa e pelos parametros dá pra você ter uma ideia doque é oque. :]1 ponto -
Pyrus OT, 1.5
1 pontoPokemon Pyrus ot Antes de tudo por favor, leia abaixo: Leiam aqui plx Informações: Imagens: Creditos: Scan Extras: REP + Novidades da 1.5 Download: http://www.mediafire.com/download/d2kcwj61kwrt6gk/PYRUS_OT.rar UTILIZEI PARA EDITAR passa na page do projeto que to trabalhando pra dar aquela força https://www.facebook.com/PokemonImperiumPI/?fref=nf1 ponto
-
[8.60] Baiak Editado (80% modificado)
[8.60] Baiak Editado (80% modificado)
marcello cordeiro reagiu a Dieguiin XP por uma resposta no tópico
1 pontoBaiak Editado 8.6 Opaa, Aqui estou eu dinovo trazendo um novo Baiak, Com muitas novidades Vamos lá. Oque tem de novo nesse baiak? Cast System 100%, Para ativar procure pocure  enableCast = false no config.lua e mude para enableCast = true War system 100% Itens donates 100% (Todos dando Skills normalmente) Set free nas quests e Armas também Dodge system Castle 24H único Com novos monstros: Warlock Castle, Medusa Castle Etc... 2 quests editadas visível no templo, SET e ARMAS Dodge, Stamina e Parcel são vendidos por alavancas no templo Magnus Cheller Task. mais informações: Download (REUPADO): SCAN: Spoiler https://www.virustotal.com/pt/file/f80f4b1eee808baf20e3c33ffd07244a963620d155abaaf77cb6d74358543d38/analysis/1413568779/ Créditos:1 ponto -
[ACTION] Como criar uma quest
1 ponto---------------------- // ---------------------- Olá muita gente (nem tanta) tão procurando como criar uma quest, estou aki para ajudar (ebauhu -sqn) gogo! Siga-me! ---------------------- // ---------------------- Pasta do teu servidor → Data → Action → Scripts. Agora crie um arquivo de documento de texto e nomeie ele do que quizer.. obrigatoriamente o arquivo ser .lua! Bom ápos fazer isso cole este script: No meu caso, vou criar um arquivo chamado Quest30.lua ---------------------- // ---------------------- [~] LEGENDA Dourado = É a posição que quando alguem abrir o bau, ele será teleportado para a coordenada que esta ali. Cinza = É o level necessário para poder abrir o bau. Roxo Forte = É o Action ID do Bau, Use qualquer um, porém não pode ser repetido em nenhum Script. Laranja = São os ID'S da Storage, usa qualquer um, porém não pode ser repitido. ( Este número não pode contér em outro script ) Rosa = É a mensagem que aparece quando abre o bau. Azul Forte = É o ID do item que ganha quando abre o bau. Azul Fraco = É a quantidade que vem do item quando abre o bau. Cyano = É a mensagem que aparece quando você tenta abrir o mesmo baú pela 2 vez. Verde = E a mensagem que aparece quando você não tem o nivel necessario para abrir o bau. Agora salve o arquivo. ---------------------- // ---------------------- Agora me siga novamente: Pasta do teu servidor → Data → Action. Quando chegar neste local, Clicke com botão direito no "Action.xml" E clicke em EDITAR Agora adicione o seguinte código: ---------------------- // ---------------------- [~] LEGENDA Roxo Forte = É o Action ID do bau, que você colocou la quando criou o arquivo na pasta Scripts. Azul Forte = É o nome do arquivo.lua que você criou na pasta Scripts. ---------------------- // ---------------------- [~] REMERE'S MAP EDITOR Agora é a ultima parte! [→] Abra seu Remere's [→] Apos ter abrido o Remere's, Vá no local do baú.. [→] Abra o bau, clickando duas vezes nele. [→] Na ACTION ID Você coloca o numero que colocou no action.xml, que no caso é 9070 [→] E em "UNIQUE ID" Você faz a mesma coisa, coloca o mesmo numero repetido, ou seja é 9070 ---------------------- // ---------------------- Depois de ter feito tudo isso,salve tudo e reinicie seu Servidor, quando logar abra o bau e ganhe a recompensa que voce editou. Flw Factur~~ ---------------------- // ---------------------- [~] Outros Topicos. Como criar um teleporte que quando mata monstro abre por 30 segundos. Pokemon Zot editado by: Factur1 ponto
-
Quake
Quake
aq snuff reagiu a xWhiteWolf por uma resposta no tópico
1 pontoVou deixar aqui uma spell que eu fiz pra brincar com funções da New Library, se você quiser adicionar essa spell no seu server você deve primeiro instalar a New Library: http://www.tibiaking.com/forum/topic/46015-new-library-v-10/ Testada em 8.54 A magia que vou apresentar hoje foi baseada nos dobradores de terra do desenho Avatar. Você controla uma vibração na terra que anda na direção que você está olhando e ao atingir um oponente roda ele em 540º. Aqui tem um pequeno gif do funcionamento da spell: Bom, sem mais delongas vamos ao script: local config = { jumps = 15, walktime = 500 } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -15, 5, 5, 1.8, 3, -20, -40) function onCastSpell(cid, var) function moveice(cid, pos, counter) local counter = counter or 0 if (counter < config.jumps) then if (isCreature(cid)) then local pos = pos or getCreaturePosition(cid) local dir = getCreatureLookDirection(cid) local newPosition = getPosByDir(pos, dir) if ((getTopCreature(newPosition).uid == 0) and doTileQueryAdd(cid, newPosition) ~= 1) then return false end doCombat(cid, combat, { pos = newPosition, type = 2 }) doSendMagicEffect(newPosition, 34) if getTopCreature(newPosition).uid ~= 0 then doSendMagicEffect(newPosition, 54) spinRotate(getTopCreature(newPosition).uid, 2.5, 100) return false end addEvent(moveice, config.walktime, cid, newPosition, counter + 1) end end end moveice(cid) return true end e em spells.xml: <instant name="TK" words="toph sense" lvl="8" mana="35" prem="0" exhaustion="1500" needlearn="0" event="script" value="especiais/quake.lua"> </instant> Espero que tenham gostado e façam bom proveito. Abraços!1 ponto -
Sprites OtPokémon 9.4
Sprites OtPokémon 9.4
emersonsantos17 reagiu a GabrielSapient por uma resposta no tópico
1 pontoEstou disponibilizando o download das sprites e o data do OtPokémon 9.4, para quem não sabe descompilar. A .spr não esta estendida. Sprites: MediaFire Scan: VirusTotal1 ponto -
[Aula 1] Introdução
[Aula 1] Introdução
jhonathan wendrell reagiu a MaXwEllDeN por uma resposta no tópico
1 pontoIntrodução Aula 1 O que é scripting? Do modo mais simples possível: scripting é o ato de programar. O nome scripting vem do nome "script". O que é um script? De um modo geral, um script é um bloco de código escrito em uma linguagem de programação interpretada, ou seja, ele precisa que alguma coisa leia ele e possa "traduzir" seu conteúdo. Lembre-se de que "script" não é um termo específico de Open Tibia Servers. O que é uma linguagem de programação interpretada? Os brasileiros falam português, ingleses falam inglês e chineses falam mandarim, e com isso o mundo é composto por várias línguas. No mundo da programação não é diferente. Existem várias línguas que podem ser usadas, cada uma com uma característica e modo de escrever diferente (Assim como o português é diferente do inglês). Entre estas linguagens, existem 2 tipos: as linguagens interpretadas e as linguagens compiladas (Não-interpretadas). Podemos fazer uma comparação tosca com a vida real: o português seria uma linguagem interpretada (Nosso cérebro precisa "traduzir" a mensagem), e os desenhos seriam a língua compilada (Nosso cérebro reconhece automaticamente a "mensagem" do desenho). As linguagens compiladas são aquelas que não precisam ser lidas por nenhum programa, pois "conversam" diretamente com o computador, enquando a linguagem interpretada não consegue se comunicar com o computador, então a linguagem compilada recebe a mensagem do codigo interpretado e traduz numa linguagem que o computador entenda, dai a linguagem interpretada pode conversar com o computador (Desde que alguém traduza suas mensagens). Voltando para a parte de Open Tibia Servers, a linguagem compilada é a linguagem usada no seu servidor: o .exe no Windows, por exemplo, e a linguagem interpretada são os scripts .lua. O seu servidor compilado vai ler os scripts .lua e traduzir o conteúdo deles para que o computador possa executar o que o script manda. Se os scripts são escritos em linguagens interpretadas, qual é a linguagem dos script usados nos Open Tibia Servers? Os Open Tibia Servers usam uma linguagem de programação (Interpretada) chamada Lua, que foi feita aqui no Brasil mesmo. Características da linguagem de programação Lua: Linguagem de Programação Interpretada Linguagem de Programação Imperativa ou Programação Procedural Linguagem de Scripts ou Linguagem de Extensão Pequena, Fácil, Leve e Eficiente " Lua foi criada por um time de desenvolvedores do Tecgraf da PUC-Rio, a princípio, para ser usada em um projeto da Petrobras. Devido à sua eficiência, clareza e facilidade de aprendizado, passou a ser usada em diversos ramos da programação, como no desenvolvimento de jogos (a LucasArts, por exemplo, usou a linguagem no jogo Escape from Monkey Island), controle de robôs, processamento de texto, etc. Também é freqüentemente usada como uma linguagem de propósito geral. " Wikipédia - Lua (Linguagem de Programação) O que eu preciso para aprender Lua e começar a produzir meus scripts? Paciência (Embora seja de fácil aprendizado, você vai levar algum tempo para aprender a linguagem) Humildade (Nunca se sinta o melhor, nem ridicularize aqueles que tiverem um conhecimento menor que o seu) Vontade (Não adianta fazer as coisas sem o menor interesse, você não chegará a lugar nenhum sem vontade) Criatividade (O principal para produzir um script é ter a idéia do que você vai fazer) Conhecer a Lógica da Programação (Não se preocupe, eu vou ensinar a Lógica da Programação nas próximas aulas.) Interpretador Lua (Para testar seus scripts, claro. Você pode usar o seu OTServer para testar, e ainda usar um interpretador Lua para testar seus scripts simples fora do OTServer) Editor Lua (Não é realmente necessário, uma vez que você pode usar um editor de textos qualquer, como o bloco de notas, mas ter um Editor Lua vai ajudar muito, e alguns até vêm com um Interpretador Lua junto!) Pagar uma taxa de R$ 700,00, afinal, não estou escrevendo estas aulas de graça! (OK, não precisa pagar nada, mas no mínimo poste seus scripts aqui e ajude a seção a crescer ) Onde posso encontrar um Interpretador e/ou Editor Lua? Como interpretador (No caso de produzir scripts para Open Tibia Servers) você deve usar um servidor próprio, pessoal somente para testar os scripts que você fez, e pode usar também um Interpretador Lua geral, para testar seus scripts fora dos OTServers. Como Editor Lua você pode usar qualquer editor de textos, mas eu recomendo usar um editor que seja próprio para a linguagem Lua. Existem dois editores que já vem com um Interpretador Lua "embutido". São eles: OTScript Live! [Download] e SciTE (Scintilla) [Download]. Exercício-Tarefa: Pesquise mais na internet sobre a linguagem Lua, Scripts, etc... Somente dúvidas serão aceitas aqui! Comentários que não forem dúvidas serão apagados e os autores serão reportados! Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele. Aula 2 - Lógica da programação >> Script Live By colex.rar1 ponto -
[SHOWOFF] - Draky Client
[SHOWOFF] - Draky Client
Yokimaru reagiu a drakylucas por uma resposta no tópico
1 pontoEntrada: essas 3 imagens ficam trocando a cada 3 segundos, dando aquele efeito do powerpoint de embranquecer a tela e trocar de imagem. Client - HP Bar antigo trabalho (achei umas SS antigas, o script deve estar no outro PC (uso notebook gamer agora))1 ponto -
Como tirar "Wild" na frente do pokemon e colocar templo
Como tirar "Wild" na frente do pokemon e colocar templo
palheta reagiu a Gabrieltxu por uma resposta no tópico
1 pontoo do templo só arrumar no config.lua na parte newPlayerSpawnPosX = x newPlayerSpawnPosY = y newPlayerSpawnPosZ = z newPlayerTownId = 11 ponto -
Como tirar "Wild" na frente do pokemon e colocar templo
Como tirar "Wild" na frente do pokemon e colocar templo
palheta reagiu a GabrielSapient por uma resposta no tópico
1 pontoVá em SeuServer\data\lib\configuration.lua, procure por: wildBeforeNames = true Troque true para false. Ta sem templo na hora de criar a conta ou na hora de logar ?1 ponto -
(Resolvido)Itens iniciais com Bug
Checa os id's dos itens, que vc qr botar, no seu items.xml e vê se tão de acordo com os do script. Se não estiverem, vc ja sabe o q fazer. hasuhsuahuas1 ponto
-
(Resolvido)Database,Comandos
1 pontoAqui tem um tutorial: http://www.tibiaking.com/forum/topic/33611-tutorial-resolvendo-qualquer-erro-na-data-base/#entry1890401 ponto
-
Virar zombie ao morrer
1 pontoCom base nos códigos do membro, a alavanca ficaria: zombielever.lua function onUse(cid, item, frompos, item2, topos) local stor = {12128, 12129} -- {storage zombie, storage humana} if getPlayerStorageValue(cid, stor[1]) > 0 or getPlayerStorageValue(cid, stor[2]) > 0 then setPlayerStorageValue(cid, stor[1], -1) setPlayerStorageValue(cid, stor[2], -1) doRemoveCondition(cid, CONDITION_OUTFIT) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(fromPos, CONST_ME_TELEPORT) else doPlayerSendCancel(cid, "Você não está morto para usar esta alavanca.") end return true end Tag: <action actionid="ACTIONID" script="zombielever.lua"/> E o portal (sem coordenadas pré determinadas nele, apenas contendo o actionID da tag): zombieportal.lua (data/movements/scripts): function onStepIn(cid, item, pos, fromPos) local stor = {12128, 12129} -- {storage zombie, storage humana} if isPlayer(cid) and getPlayerStorageValue(cid, stor[1]) > 0 or getPlayerStorageValue(cid, stor[2]) > 0 then setPlayerStorageValue(cid, stor[1], -1) setPlayerStorageValue(cid, stor[2], -1) doRemoveCondition(cid, CONDITION_OUTFIT) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(fromPos, CONST_ME_TELEPORT) else doTeleportThing(cid, fromPos, true) doSendMagicEffect(fromPos, CONST_ME_POFF) doPlayerSendCancel(cid, "Você não está morto para entrar no portal.") end return true end Tag: <movevent type="StepIn" actionid="ACTIONID" event="script" value="zombieportal.lua"/>1 ponto
-
(Resolvido)Sistema de Presente
(Resolvido)Sistema de Presente
JonatasLucasf reagiu a Orochi Elf por uma resposta no tópico
1 pontoBom amigo, eu não testei não. local items = { [2160] = {maxAmmount = 10, chance = 10}, [2158] = {maxAmmount = 100, chance = 20}, } function onUse(cid, item) for i, e in pairs(items) do if math.random(100) <= e.chance then local ammount = math.random(1, e.maxAmmount) doPlayerAddItem(cid, i, ammount) doPlayerSendTextMessage(cid, 27, "Voce ganhou "..ammount.."x "..getItemNameById(i)) end end doRemoveItem(item.uid) return true end1 ponto -
Organização das Palletes
Organização das Palletes
Cricket reagiu a Drazyn1291 por uma resposta no tópico
1 pontoprocura na pagina do maior mapper do tibiaking sem ofensa aos outros o Daniel se jah resolveu coloca melhor resposta1 ponto -
(Resolvido)[PEDIDO] Talkaction
1 pontodonateaccess.lua (data/talkactions/scripts): function onSay(cid, words, param, channel) local stor = 12345 -- storage local p = string.explode(param, ",") local pid, ts, tn = getPlayerByNameWildcard(p[1]), tostring(p[1]), tonumber(p[2]) if (param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Enter the name of the player and the number of days you want to give access to it. Thus: /donate Player, 30') end if (not ts or not tn or p[3]) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Invalid parameter specified.') end if (tn < 1) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You need to assign to the player at least one day of access.') end if (not pid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player '..ts..' not found.') end setPlayerStorageValue(pid, stor, os.time() + (tn * 86400)) doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Were assigned '..tn..' day(s) of donate access to your account.') doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'You have assigned '..tn..' day(s) of donate access to the player '..ts) return true end Tag - talkactions.xml (data/talkactions): <talkaction log="yes" words="/donate" access="5" event="script" value="donateaccess.lua"/>1 ponto
-
(Resolvido)[Erro] Catch System [Ajuda]
(Resolvido)[Erro] Catch System [Ajuda]
CobblePlay reagiu a Thayam por uma resposta no tópico
1 pontoarrume os spoiler do erro para que possamos ajuda-lo amigo1 ponto -
(Resolvido)[Erro] Catch System [Ajuda]
(Resolvido)[Erro] Catch System [Ajuda]
CobblePlay reagiu a Gabrieltxu por uma resposta no tópico
1 pontoo Spoiler do erro não está funcionando amigo...1 ponto -
(Resolvido)Como adiciono novas Badges na Badge Case?
(Resolvido)Como adiciono novas Badges na Badge Case?
ducb reagiu a MarcosFraga por uma resposta no tópico
1 pontoSó avisando cuidado com double post, da proxima vez abra um novo topico.. Mas se ainda não fez faça: Adicione o id da nova Bag em storage = 30001, items = {2120, 1987, 1988, 2376, 2580, 2529, 188, 192, 5941, novoID} } Depois adicione as novas badges na nova bag usando : local bag = getPlayerItemById(cid, false, BAGID).uid doAddContainerItem(bag, BADGEID, 1) doAddContainerItem(bag, BADGEID, 1) doAddContainerItem(bag, BADGEID, 1) return true end Espero que de certo.1 ponto -
[URGENTE] EQUIPE PARA BAIAK 8.60 IBAIAK
[URGENTE] EQUIPE PARA BAIAK 8.60 IBAIAK
Fask do Gera reagiu a Cricket por uma resposta no tópico
1 pontooque você precisa na verdade? Se quiser minha ajuda pra fazer os Scripts ,sou um excelente mapper tbm ,estou com um trabalho pronto porem to sem grana pro datacenter meu Whats 96551-93671 ponto -
tal level compra casa
tal level compra casa
leonardosantos reagiu a House por uma resposta no tópico
1 pontoconfig.lua >Ctrl+f e Procura por houses >"Level to buy house"1 ponto -
(Pedido) Não poder deslogar estando em: Surf, Ride e Fly!
(Pedido) Não poder deslogar estando em: Surf, Ride e Fly!
Wise reagiu a Adriano SwaTT por uma resposta no tópico
1 pontoTenho que concordar com o Suicide, pois pelo pouco que sei de scripts, acontecerá da seguinte maneira: SE colocar o RETURN FALSE na última parte, os players fora do IF de checagem também não poderão logar. Quase certeza disso. Faça o teste.1 ponto -
(Resolvido)Criar um servidor
1 pontoPrimeiro vc deve baixar um ot: http://www.tibiaking.com/forum/forum/113-downloads/ Depois vc deve configurar o arquivo config.lua para deixar o ot com as caracteristicas basicas do jeito que vc qr. Agora vc deve abrir as portas necessarias para o ot rodar (7171 e 7172) em seu roteador e pc. Agora vc faz o que vc quiser, coloca eventos, website, etc. Se esclareci alguma coisa, REP + pf1 ponto
-
[PARCERIA] Dedicado + Web Site = OT Poke
Mano tenho um servidor aqui que era via hamachi mais resolvi fazer uma manutenção nele por um tempo atualmente ele tem 98 players na rede do hamachi se quiser da uma olhada na rede: Nome da rede: Pokemon-World-Adventure Senha da rede: 123 Se estiver interessado pode mandar MP que logo retornarei. Informações: Base Pokezot Pokes da 1° até a 6° Mapa editado Area Donate Area Up Zona temporária de Natal Pokemons Adicionados e Remakes feitos por Mim1 ponto
-
(Resolvido)(Ajuda) Fly somente para VIP's
(Resolvido)(Ajuda) Fly somente para VIP's
Thayam reagiu a Ken Kaneki por uma resposta no tópico
1 pontofunction doPushCreatureTo(uid, direction, distance, speed) --//doPushCreature(creature,getPlayerLookDir(cid)) -- Desenvolvido por Dokmos 30/01/2009 -- Apoio Dinastias local pos = getThingPos(uid) local PARAM = {{1}, {500}} local DIRECTION = { {{0,0},{6,7},{1,3}}, {{1,1},{5,7},{0,2}}, {{2,2},{4,5},{1,3}}, {{3,3},{4,6},{0,2}}, {{4,4},{2,3}}, {{5,5}, {1,2}}, {{6,6},{0,1}}, {{7,7},{0,3}} } table.insert(PARAM[1], distance) table.insert(PARAM[2], speed) for dvar = 1, #DIRECTION[direction+1] do rand = math.random(2) d = DIRECTION[direction+1][dvar][rand] dir = {x = (math.fmod(d,2)*(-(d-2))+math.floor(d/4)*math.fmod(d,2)*d-math.floor(d/4)), y = (((d-1)*(d-1-(d-1)*math.ABS(d-2))*(1-math.floor(d/4)))-(math.floor(d/4)*(math.floor(d/6)*2-1)))} newtile = {x = (pos.x+dir.x), y = (pos.y+dir.y), z = pos.z} if (getTileThingByPos(newtile).uid ~= 0) and (hasProperty(getTileThingByPos(newtile).uid,3) == FALSE) and (queryTileAddThing(uid,newtile) == 1) then break end rand = (math.fmod(rand,2)+1) d = DIRECTION[direction+1][dvar][rand] dir = {x = (math.fmod(d,2)*(-(d-2))+math.floor(d/4)*math.fmod(d,2)*d-math.floor(d/4)), y = (((d-1)*(d-1-(d-1)*math.abs(d-2))*(1-math.floor(d/4)))-(math.floor(d/4)*(math.floor(d/6)*2-1)))} newtile = {x = (pos.x+dir.x), y = (pos.y+dir.y), z = pos.z} if (getTileThingByPos(newtile).uid ~= 0) and (hasProperty(getTileThingByPos(newtile).uid,3) == FALSE) and (queryTileAddThing(uid,newtile) == 1) then break end if (dvar == #DIRECTION[direction+1]) then newtile = pos end end doTeleportThing(uid, newtile, true) if (PARAM[1][#PARAM[1]] > 1) then addEvent(doPushCreature, PARAM[2][#PARAM[2]], uid, direction, (distance-1), speed) end end --///////////////////////////////////////////////////////////////////////////////////////////////////////-- local dirpref = { [1] = {[NORTH] = {[1] = {NORTH}, [2] = {EAST, WEST}, [3] = {NORTHEAST, NORTHWEST}}, [EAST] = {[1] = {EAST}, [2] = {NORTH, SOUTH}, [3] = {NORTHEAST, SOUTHEAST}}, [SOUTH] = {[1] = {SOUTH}, [2] = {EAST, WEST}, [3] = {SOUTHEAST, SOUTHWEST}}, [WEST] = {[1] = {WEST}, [2] = {SOUTH, NORTH}, [3] = {NORTHWEST, SOUTHWEST}}, [NORTHEAST] = {[1] = {NORTH, EAST}, [2] = {NORTHEAST}, [3] = {SOUTH, WEST}}, [SOUTHEAST] = {[1] = {SOUTH, EAST}, [2] = {SOUTHEAST}, [3] = {NORTH, WEST}}, [SOUTHWEST] = {[1] = {SOUTH, WEST}, [2] = {SOUTHWEST}, [3] = {NORTH, EAST}}, [NORTHWEST] = {[1] = {NORTH, WEST}, [2] = {NORTHWEST}, [3] = {EAST, SOUTH}}}, [2] = {[NORTH] = {[1] = {NORTH}, [2] = {WEST, EAST}, [3] = {NORTHWEST, NORTHEAST}}, [EAST] = {[1] = {EAST}, [2] = {SOUTH, NORTH}, [3] = {SOUTHEAST, NORTHEAST}}, [SOUTH] = {[1] = {SOUTH}, [2] = {WEST, EAST}, [3] = {SOUTHWEST, SOUTHEAST}}, [WEST] = {[1] = {WEST}, [2] = {NORTH, SOUTH}, [3] = {SOUTHWEST, NORTHWEST}}, [NORTHEAST] = {[1] = {EAST, NORTH}, [2] = {NORTHEAST}, [3] = {WEST, SOUTH}}, [SOUTHEAST] = {[1] = {EAST, SOUTH}, [2] = {SOUTHEAST}, [3] = {WEST, NORTH}}, [SOUTHWEST] = {[1] = {WEST, SOUTH}, [2] = {SOUTHWEST}, [3] = {EAST, NORTH}}, [NORTHWEST] = {[1] = {WEST, NORTH}, [2] = {NORTHWEST}, [3] = {SOUTH, EAST}}}, } function doPushCreature(uid,direction,distance,time) if isCreature(uid) == TRUE then local rand = (2*math.random(0,1))-1 local rand2 = math.random(-1,0) if direction == 0 then signal = {0,rand,-rand,rand,-rand,0,-1,-1,-1,0,0,0} elseif direction == 1 then signal = {1,1,1,0,0,0,0,rand,-rand,rand,-rand,0} elseif direction == 2 then signal = {0,rand,-rand,rand,-rand,0,1,1,1,0,0,0} elseif direction == 3 then signal = {-1,-1,-1,0,0,0,0,rand,-rand,rand,-rand,0} elseif direction == 4 then signal = {-1,rand2,(-rand2)-1,0,1,rand2+1,rand2,0} elseif direction == 5 then signal = {1,-rand2,-((-rand2)-1),0,1,rand2+1,rand2,0} elseif direction == 6 then signal = {-1,rand2,(-rand2)-1,0,-1,(-rand2)-1,rand2,0} else signal = {1,-rand2,-((-rand2)-1),0,-1,(-rand2)-1,rand2,0} end local pos = getThingPos(uid) nsig = #signal nvar = 0 repeat nvar = nvar+1 newpos = {x=pos.x+(signal[nvar]),y=pos.y+(signal[(nsig/2)+nvar]),z=pos.z} newtile = {x=newpos.x,y=newpos.y,z=newpos.z,stackpos=0} until getTileThingByPos(newtile).uid ~= 0 and hasProperty(getTileThingByPos(newtile).uid,3) == FALSE and canWalkOnPos(newtile, true, false, true, true, false) and queryTileAddThing(uid,newpos) == 1 or nvar == (nsig/2) --alterado v1.5 if distance == nil or distance == 1 then doTeleportThing(uid,newpos,TRUE) else distance = distance-1 doTeleportThing(uid,newpos,TRUE) if time ~= nil then addEvent(doPushCreature,time,uid,direction,distance,time) else addEvent(doPushCreature,500,uid,direction,distance,500) end end end end function doComparePosition(pos1, pos2) if pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z then return true end return false end function walkTo(cid, direction, finalp, useExtraMoveOrder) if not isCreature(cid) then return true end doChangeSpeed(cid, 5) local x = getThingPos(cid) local ratedelaywalk = 1 local finalpos = {x = finalp.x, y = finalp.y, z = finalp.z} if not canWalkOnPos(finalpos, false, false, true, true, true) then finalpos = getClosestFreeTile(cid, finalpos) end if not finalpos then return false end local dir = getDirectionToWalk(cid, finalpos, 2, 0, 0, false, true, 300) if dir and tonumber(dir) ~= nil and tonumber(dir) >= 0 and tonumber(dir) <= 7 then if dir >= 4 then ratedelaywalk = 0.4 end doPushCreature(cid, dir, 1, getNextStepDelay(cid, dir) * ratedelaywalk) return getNextStepDelay(cid, dir) * ratedelaywalk elseif useExtraMoveOrder then local random = math.random(1, 2) for ta = 1, 3 do for tb = 1, #dirpref[random][direction][ta] do local y = getPosByDir(getThingPos(cid), dirpref[random][direction][ta][tb]) local w = getCreatureLP(cid) local z = getDirectionTo(y, getThingPos(cid)) -- direção q vai marcar local j = getDirectionTo(getThingPos(cid), y) -- direção q ele vai if canWalkOnPos(y, true, false, true, true, true) and w ~= j then if dirpref[random][direction][ta][tb] >= 4 then ratedelaywalk = 0.5 end doPushCreature(cid, dirpref[random][direction][ta][tb], 1, getNextStepDelay(cid, dirpref[random][direction][ta][tb]) * ratedelaywalk) markLP(cid, z) return getNextStepDelay(cid, dirpref[random][direction][ta][tb]) * ratedelaywalk end end end end return false end function getCreatureLP(cid) return getPlayerStorageValue(cid, 197) end function markLP(cid, dir) setPlayerStorageValue(cid, 197, dir) end function markPos(sid, pos) if not isCreature(sid) then return end setPlayerStorageValue(sid, 145, pos.x) setPlayerStorageValue(sid, 146, pos.y) setPlayerStorageValue(sid, 147, pos.z) end function markFlyingPos(sid, pos) if not isCreature(sid) then return end setPlayerStorageValue(sid, 33145, pos.x) setPlayerStorageValue(sid, 33146, pos.y) setPlayerStorageValue(sid, 33147, pos.z) end function getFlyingMarkedPos(sid) if not isCreature(sid) then return end local xx = getPlayerStorageValue(sid, 33145) local yy = getPlayerStorageValue(sid, 33146) local zz = getPlayerStorageValue(sid, 33147) return {x = xx, y = yy, z = zz, stackpos = 0} end function getMarkedPos(sid) if not isCreature(sid) then return end local xx = getPlayerStorageValue(sid, 145) local yy = getPlayerStorageValue(sid, 146) local zz = getPlayerStorageValue(sid, 147) return {x = xx, y = yy, z = zz} end function getOwnerPos(sid) if not isCreature(sid) then return end local xx = getPlayerStorageValue(sid, 148) local yy = getPlayerStorageValue(sid, 149) local zz = getPlayerStorageValue(sid, 150) return {x = xx, y = yy, z = zz} end function markOwnerPos(sid, pos) if not isCreature(sid) then return end setPlayerStorageValue(sid, 148, pos.x) setPlayerStorageValue(sid, 149, pos.y) setPlayerStorageValue(sid, 150, pos.z) end function recheck(sid, skill, pos) if not isCreature(sid) or not isCreature(getCreatureMaster(sid)) then return end local cid = getCreatureMaster(sid) if skill == "cut" then local item = getTileItemById(pos, 2767) doCreatureSay(sid, "CUT!", TALKTYPE_MONSTER) markPos(sid, {x=1,y=1,z=7}) doFaceCreature(sid, pos) doSendMagicEffect(getThingPos(item.uid), 141) doTransformItem(item.uid, 6216) local function growBush() doTransformItem(getTileItemById(pos, 6216).uid, 2767) end addEvent(growBush, intervalToRegrowBushAndStones * 1000) elseif skill == "rock smash" then local item = getTileItemById(pos, 1285) doCreatureSay(sid, "ROCK SMASH!", TALKTYPE_MONSTER) markPos(sid, {x=1,y=1,z=7}) doFaceCreature(sid, pos) doSendMagicEffect(getThingPos(item.uid), 118) doTransformItem(item.uid, 3610) local function growRock() doTransformItem(getTileItemById(pos, 3610).uid, 1285) end addEvent(growRock, intervalToRegrowBushAndStones * 1000) elseif skill == "headbutt" then --alterado v1.6 local master = getCreatureMaster(sid) local array = {} local lvl = {25, 40, 60, 80, 150, 1000} --lvls for i = 1, #lvl do if getPlayerLevel(master) <= lvl[i] then array = headbutt[lvl[i]] break end end local rand = array[math.random(#array)] for j = 1, rand[2] do local poke = doCreateMonster(rand[1], getClosestFreeTile(sid, pos)) doSetMonsterPassive(poke) doWildAttackPlayer(poke, master) end local item = getTileItemById(pos, 12591) --id do item arvore normal doCreatureSay(sid, "HEADBUTT!", TALKTYPE_MONSTER) markPos(sid, {x=1,y=1,z=7}) doFaceCreature(sid, pos) doSendMagicEffect(getThingPos(item.uid), 118) doTransformItem(item.uid, 12592) --id do item arvore quebrada local function growHead() doTransformItem(getTileItemById(pos, 12592).uid, 12591) --id do item arvore quebrada, arvore normal end addEvent(growHead, choose(5, 10, 20, 30) * 60 * 10) --o tempo pra arvore voltar ao normal varia de 5~30min --mudei jah elseif skill == "dig" then local item = getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}) doCreatureSay(sid, "DIG!", TALKTYPE_MONSTER) markPos(sid, {x=1,y=1,z=7}) doFaceCreature(sid, pos) doSendMagicEffect(getThingPos(item.uid), 3) doTransformItem(item.uid, item.itemid+1) local function closeHole() doTransformItem(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).uid, item.itemid) end addEvent(closeHole, intervalToRegrowBushAndStones * 1000) elseif skill == "fly" then if not isPremium(cid) then doPlayerSendCancel(cid, "Only PREMIUM MEMBERS are allowed to fly.") return true end local pokemon = flys[getPokemonName(getCreatureSummons(cid)[1])] doPlayerSendTextMessage(cid, 27, "Type \"up\" or \"h1\" to fly/levitate higher and \"down\" or \"h2\" to fly/levitate lower.") --alterado v1.8 doChangeSpeed(cid, -getCreatureSpeed(cid)) local speed = 20 + PlayerSpeed + getSpeed(sid) * speedRate doChangeSpeed(cid, speed) setPlayerStorageValue(cid, 54844, speed) doSetCreatureOutfit(cid, {lookType = pokemon[1] + 351}, -1) doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", getCreatureHealth(getCreatureSummons(cid)[1]) / getCreatureMaxHealth(getCreatureSummons(cid)[1])) doRemoveCreature(getCreatureSummons(cid)[1]) setPlayerStorageValue(cid, 17000, 1) if getCreatureOutfit(cid).lookType == 667 or getCreatureOutfit(cid).lookType == 999 then markPosEff(cid, getThingPos(cid)) sendMovementEffect(cid, 136, getThingPos(cid)) --edited efeito quando anda com o porygon end local item = getPlayerSlotItem(cid, 8) if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) <= 0 then sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")]) --alterado v1.8 end if useOTClient then doPlayerSendCancel(cid, '12//,hide') --alterado v1.8 end return true elseif skill == "ride" then local pokemon = rides[getPokemonName(getCreatureSummons(cid)[1])] doChangeSpeed(cid, -getCreatureSpeed(cid)) local speed = 20 + PlayerSpeed + getSpeed(sid) * speedRate doChangeSpeed(cid, speed) setPlayerStorageValue(cid, 54844, speed) doSetCreatureOutfit(cid, {lookType = pokemon[1] + 351}, -1) doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", getCreatureHealth(getCreatureSummons(cid)[1]) / getCreatureMaxHealth(getCreatureSummons(cid)[1])) doRemoveCreature(getCreatureSummons(cid)[1]) setPlayerStorageValue(cid, 17001, 1) local item = getPlayerSlotItem(cid, 8) if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) <= 0 then sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")]) --alterado v1.8 end if useOTClient then doPlayerSendCancel(cid, '12//,hide') --alterado v1.8 end return true end if getOwnerPos(sid).x ~= getThingPos(getCreatureMaster(sid)).x or getOwnerPos(sid).y ~= getThingPos(getCreatureMaster(sid)).y or isCreature(getCreatureTarget(getCreatureMaster(sid))) then doRegainSpeed(sid) markPos(sid, {x=1,y=1,z=7}) return true end addEvent(recheck, 120, sid) end function goThere(sid, thepos, skill, target, rept) if not isCreature(sid) or not isCreature(getCreatureMaster(sid)) then return true end if getCreatureNoMove(sid) or isSleeping(sid) or isParalyze(sid) then return true end --alterado v1.6 if thepos.x ~= getMarkedPos(sid).x or thepos.y ~= getMarkedPos(sid).y then return true end if isCreature(getCreatureTarget(getCreatureMaster(sid))) and target == false or (rept and rept <= 0) then doRegainSpeed(sid) markPos(sid, {x=1,y=1,z=7}) return true end if (skill == "ride" or skill == "fly") and getDistanceBetween(getThingPos(sid), getMarkedPos(sid)) <= 1 then local currentPos = getThingPos(getCreatureMaster(sid)) local summonPos = getThingPos(sid) local masterPos = getCreatureLastPosition(sid) if currentPos.x == thepos.x and currentPos.y == thepos.y then if getDirectionTo(getThingPos(sid), getThingPos(getCreatureMaster(sid))) <= 3 then doRegainSpeed(sid) local ndelay = getNextStepDelay(sid, 0) doTeleportThing(sid, thepos, true) doChangeSpeed(sid, -getCreatureSpeed(sid)) markPos(sid, getThingPos(getCreatureMaster(sid))) addEvent(goThere, ndelay, sid, getMarkedPos(sid), skill, target) else doChangeSpeed(sid, - getCreatureSpeed(sid)) doRegainSpeed(sid) markPos(sid, getThingPos(getCreatureMaster(sid))) local x = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly") doChangeSpeed(sid, - getCreatureSpeed(sid)) addEvent(goThere, x, sid, getMarkedPos(sid), skill, target) end return true else markPos(sid, getThingPos(getCreatureMaster(sid))) doChangeSpeed(sid, - getCreatureSpeed(sid)) doRegainSpeed(sid) local ndelay = getNextStepDelay(sid, 0) if getDirectionTo(getThingPos(sid), getMarkedPos(sid)) >= 4 then local x = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly") else doTeleportThing(sid, getPosByDir(getThingPos(sid), getDirectionTo(getThingPos(sid), getMarkedPos(sid)))) end doChangeSpeed(sid, - getCreatureSpeed(sid)) addEvent(goThere, x and x or ndelay, sid, getMarkedPos(sid), skill, target) return true end addEvent(recheck, 350, sid, skill, thepos) return true end if getThingPos(sid).x == getMarkedPos(sid).x and getThingPos(sid).y == getMarkedPos(sid).y then if isCreature(getCreatureTarget(sid)) then doFaceCreature(sid, getThingPos(getCreatureTarget(sid))) end if skill == "blink" then doChangeSpeed(sid, - getCreatureSpeed(sid)) --edited blink end addEvent(recheck, 350, sid, skill, thepos) return true end if (getOwnerPos(sid).x ~= getThingPos(getCreatureMaster(sid)).x or getOwnerPos(sid).y ~= getThingPos(getCreatureMaster(sid)).y) and isCreature(getCreatureTarget(getCreatureMaster(sid))) == false and skill == "move" then doRegainSpeed(sid) markPos(sid, {x=1,y=1,z=7}) return true end doRegainSpeed(sid) local holeid = thepos holeid.stackpos = 0 holeid = getTileThingByPos(holeid).itemid if getDistanceBetween(getThingPos(sid), getMarkedPos(sid)) <= 1 and (not isWalkable(getPosByDir(getThingPos(sid), getDirectionTo(getThingPos(sid), getMarkedPos(sid))), true, false, false, true) or isInArray(specialabilities["digholes"], holeid)) then if isGhostPokemon(sid) and getPlayerStorageValue(getCreatureMaster(sid), 990) <= 0 then local todir = getDirectionTo(getThingPos(sid), getMarkedPos(sid)) if todir <= 3 then doTeleportThing(sid, getMarkedPos(sid), true) else local gotopos = getPosByDir(getThingPos(sid), dirpref[math.random(1, 2)][todir][1][math.random(1, 2)]) doTeleportThing(sid, gotopos, true) addEvent(goThere, getNextStepDelay(sid, 0), sid, getMarkedPos(sid), skill, target) return true end end doFaceCreature(sid, getMarkedPos(sid)) addEvent(recheck, 180, sid, skill, thepos) doChangeSpeed(sid, - getCreatureSpeed(sid)) return true end local ret = 0 if getDistanceBetween(getThingPos(sid), getMarkedPos(sid)) <= 1 then ret = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly" or isGhostPokemon(sid)) if not tonumber(ret) then doFaceCreature(sid, getMarkedPos(sid)) addEvent(recheck, 180, sid, skill, thepos) doChangeSpeed(sid, - getCreatureSpeed(sid)) return true end else --alterado ret = walkTo(sid, getDirectionTo(getThingPos(sid), getMarkedPos(sid)), getMarkedPos(sid), skill == "ride" or skill == "fly" or not isGhostPokemon(sid))-- and isSightClear(getThingPos(sid), getMarkedPos(sid), false))) end -----------------------------DITTO------------------ if (getCreatureName(mysum) == "Ditto") and getItemAttribute(thisball.uid, "ehditto") ~= -1 and isMonster(item2.uid) and pokes[getCreatureName(item2.uid)] then local m = getCreatureMaster(cid) local p = getPlayerSlotItem(m, 8) local proibidossempre = {"Mew_", "Mewtwo_", "Unown Legion", "Ho-oh", "Moltres", "Celebi", "Moltres", "Zapdos", "Suicune", "Entei", "Raikou", "Articuno", "Lugia", "Mewtwo", "Mew", "Shiny Rhydon", "Shiny Ariados", "Shiny Magneton", "Shiny Ninetales", "Shiny Politoed", "Shiny Stantler", "Shiny Dodrio", "Shiny Espeon", "Shiny Umbreon"} -- Nunca permitir local proibidosboost = {"Shiny Dragonite", "Shiny Snorlax", "Shiny Gyarados", "Shiny Scyther"} -- Permitir se ditto for +50 local outpokes = {"Magnet Electabuzz","Elder Tyranitar","Hard Golem","Brute Rhydon","Iron Steelix","Brave Charizard","Elder Charizard","Lava Magmar","Enraged Typhlosion","Capoeira Hitmontop","Boxer Hitmonchan","Taekwondo Hitmonlee","Dragon Machamp","Undefeated Machamp","Wardog Arcanine","Elder Arcanine","Furious Mantine","War Gyarados","Brave Blastoise","Brave Venusaur","Ancient Meganium","Tribal Feraligatr","Elder Dragonite","Elder Pinsir","Elder Raichu","Charged Raichu","Tribal Xatu","Enigmatic Girafarig","Ancient Alakazam","Master Alakazam","Furious Ampharos","Elder Electabuzz","Furious Scyther","Tribal Scyther","War Heracross","Metal Scizor","Brave Nidoking","Brave Nidoqueen","Elder Muk","Dark Crobat","Trickmaster Gengar" ,"Elder Gengar" ,"Banshee Misdreavus","Hungry Snorlax","Brute Ursaring","War Granbull","SINGER Wigglytuff","Aviator Pidgeot","Metal Skarmory","Brave Noctowl","Elder Pidgeot","Ancient Dragonite","Milch-Miltank","Ancient Kingdra","Psy Jynx","Elder Venusaur","Elder Jynx","Evil Cloyster","Freezing Dewgong","Elder Tangela","Furious Sandslash","Roll Donphan","Bone Marowak","Octopus Octillery","Moon Clefable","Heavy Piloswine","Elder Blastoise","Elder Tentacruel","Elder Marowak","Master Stantler"} local boost = getItemAttribute(thisball.uid, "boost") or 0 if getCreatureName(item2.uid) == "Ditto" or getCreatureName(item2.uid) == "Shiny Ditto" then doPlayerSendCancel(cid, "Your ditto can't TRANSFORM into another ditto.") markPos(mysum, unfix) return true end if isInArray(outpokes, getCreatureName(item2.uid)) then doPlayerSendCancel(cid, "Your ditto can't TRANSFORM into this pokemon.") markPos(mysum, unfix) return true end if getPlayerLevel(cid) < pokes[getCreatureName(item2.uid)].level then doPlayerSendCancel(cid, "You haven't level to TRANSFORM into that pokemon.") markPos(mysum, unfix) return true end if isInArray(proibidossempre, getCreatureName(item2.uid)) then --Checa a lista doPlayerSendCancel(cid, "Your ditto can't transform into that pokemon.") markPos(mysum, unfix) return true end if isInArray(proibidosboost, getCreatureName(item2.uid)) and boost < 50 then --Checa a lista doPlayerSendCancel(cid, "Your ditto can't transform into that pokemon.") markPos(mysum, unfix) return true end markPos(mysum, unfix) doFaceCreature(mysum, getThingPos(item2.uid)) doDittoTransform(mysum, getCreatureName(item2.uid)) return true end if not tonumber(ret) then doPlayerSendCancel(getCreatureMaster(sid), "Destination is not reachable.") markPos(sid, {x=1,y=1,z=7}) return true end doChangeSpeed(sid, - getCreatureSpeed(sid)) addEvent(goThere, tonumber(ret), sid, getMarkedPos(sid), skill, target, rept and rept - 1 or 22) end1 ponto -
Addando novos pokemons ao meu servidor de poketibia
data/lib cath.lua, adicione lá, bom, você criou um topico, e mandei um video tutorial, você viu ele completo?1 ponto
-
Addando novos pokemons ao meu servidor de poketibia
Você precisar adicionar no Cath.Lua, deve ficar em data/lib cath.lua .. Qual base estás usando?1 ponto
-
(Resolvido)[AJUDA]Erro no Effect da spell
(Resolvido)[AJUDA]Erro no Effect da spell
wallacewts reagiu a Ken Kaneki por uma resposta no tópico
1 pontoAparece algum erro ? Tenta esse aqui. Caso não funcione me mande a tag no spells.xml. local tempo = 60 -- tempo em segundos. local effect = {136} -- effect no player, caso queira apenas 1, basta remover os outros numeros. local ml = 35 -- quantos ira aumentar o skill de ML local skillfist = 35 -- quantos ira aumentar o skill de Fist local skillsword = 35 -- quantos ira aumentar o skill de Sword local skillaxe = 35 -- quantos ira aumentar o skill de Axe local skillclub = 35 -- quantos ira aumentar o skill de Club local skilldistance = 35 -- quantos ira aumentar o skill de Distance local skillshield = 35 -- quantos ira aumentar o skill de Shield local health = 100 -- A cada 1 segundo quantos aumentar de vida local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, tempo*1000) setConditionParam(condition, CONDITION_PARAM_STAT_MAGICLEVEL, ml) setConditionParam(condition, CONDITION_PARAM_SKILL_FIST, skillfist) setConditionParam(condition, CONDITION_PARAM_SKILL_SWORD, skillsword) setConditionParam(condition, CONDITION_PARAM_SKILL_AXE, skillaxe) setConditionParam(condition, CONDITION_PARAM_SKILL_CLUB, skillclub) setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCE, skilldistance) setConditionParam(condition, CONDITION_PARAM_SKILL_SHIELD, skillshield) setConditionParam(condition, CONDITION_PARAM_OUTFIT, outfit) setCombatCondition(combat, condition) local condition = createConditionObject(CONDITION_HASTE) setConditionParam(condition, CONDITION_PARAM_SPEED, 250) setConditionParam(condition, CONDITION_PARAM_TICKS, tempo*1000) setConditionParam(condition, CONDITION_PARAM_BUFF, TRUE) setCombatCondition(combat, condition) local condition = createConditionObject(CONDITION_REGENERATION) setConditionParam(condition, CONDITION_PARAM_SUBID, 1) setConditionParam(condition, CONDITION_PARAM_BUFF, TRUE) setConditionParam(condition, CONDITION_PARAM_TICKS, tempo*1000) setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, health) setConditionParam(condition, CONDITION_PARAM_HEALTHTICKS, 1000) setCombatCondition(combat, condition) function magicEffect1(tempo2,tempo3,cid) if (isCreature(cid)) then if getPlayerStorageValue(cid, 102053) > 0 and getCreatureCondition(cid, CONDITION_REGENERATION, 1) then for i=1, #effect do local position = {x=getPlayerPosition(cid).x+1, y=getPlayerPosition(cid).y, z=getPlayerPosition(cid).z} doSendMagicEffect(position, effect[i]) end end end end function onCastSpell(cid, var) local position127 = {x=getPlayerPosition(cid).x, y=getPlayerPosition(cid).y, z=getPlayerPosition(cid).z} if getPlayerStorageValue(cid, 102053) ~= 1 or getCreatureCondition(cid, CONDITION_REGENERATION, 1) == false then doCombat(cid, combat, var) tempo2 = 0 while (tempo2 ~= (tempo*1000)) do addEvent(magicEffect1, tempo2, tempo2, tempo*1000, cid) tempo2 = tempo2 + 300 end setPlayerStorageValue(cid, 102053,1) -- storage verifica transformado, quando = 1 player esta transformado. doCreatureSay(cid, "Bijuu Chakra Mode", TALKTYPE_MONSTER) else doPlayerSendCancel(cid, "Sorry, you are transformed.") end end1 ponto -
[ShowOFF] WebSite
1 ponto10,0, gostei muito, se liberar ele, ajudará muito Deixa pequenos icones na parte inferior, e onde tem esses icones com esse nome grande do tt e face, coloca pra passar imagens em forma de slide.1 ponto
-
[Pokemon Kpdo] Pokemon kpdo exaioros By Cater
[Pokemon Kpdo] Pokemon kpdo exaioros By Cater
DouglasTibia reagiu a kpdo por uma resposta no tópico
1 pontonão é ser esperto , é ser direto , o servidor estava indo a venda por ex staffs, e eu não tenho o interesse no momento de postar a source pois o kpdo se encontra online,mais pode ser que eu posto ele mesmo assim, mais ainda vo modificar o kpdo em algumas coisa. e eu não to querendo que achem bugs, ou algo do tipo , ele simplesmente ta ai pra quem quiser usar, os sistemas , os scripts, uma boa base para brincar ou fazer um servidor foda.1 ponto -
[Pokemon Kpdo] Pokemon kpdo exaioros By Cater
[Pokemon Kpdo] Pokemon kpdo exaioros By Cater
edumasterrr reagiu a Tazz por uma resposta no tópico
1 pontoRealmente, para nós da Equipe Exaioros foi um grande golpe e para não permitirmos que alguém que nos ROUBOU lucre nas nossas custas, essa decisão infelizmente foi necessária e tivemos que postar tudo nosso conteúdo. Porém, as Sources não serão liberadas, não agora, o servidor Exaioros KPDO/PBO, ambos irão continuar ONLINE normalmente com muitas novidades que estão à caminho. O que pedimos é, quem for atualizando, compartilhe, criem coisas novas, usem à imaginação de vocês, façam algo grandioso com uma base tão foda que foi lhes dada. Enfim, como falei, foi um grande golpe para nós, sejam felizes com tal base e façam bom proveito. Att, Tazz1 ponto -
[Pokemon Kpdo] Pokemon kpdo exaioros By Cater
Tutorial para colocar qualquer Player ADM. Basta ir na pasta XML, procura por Groups.xml, e deleta ele, e em seguida você procura Groupxs.xml e renomeia para Groups.xml. Feito isso, só mudar o Acesso do Personagem que queira deixar como ADM, GM ou Tutor, etc. Ou então, não delete o groups.xml atual, e basta abrir-lo e editar as seguintes linhas: <group id="4" name="[Kpdo]Master" flags="3845069447162" customFlags="2097151" access="5" violationReasons="23" nameViolationFlags="426" statementViolationFlags="469" depotLimit="5000" maxVips="500"/> <group id="4" - 4 = o Acesso do Player name="[Kpdo]Master" - aqui você remove '[Kpdo]Master' e coloca o nome do Player que vai dar o cargo. repetindo o Processo para todo o resto (Gm, CM, Tutor). Depois renomeio os nomes em lib/adm.1 ponto
-
[Pokemon Kpdo] Pokemon kpdo exaioros By Cater
[Pokemon Kpdo] Pokemon kpdo exaioros By Cater
alisson201555 reagiu a kpdo por uma resposta no tópico
1 pontoObrigado , Em breve irei colocar as prints do servidor e formatar melhor o topico!!! conto com a colaboração de todos para tornar esse um padrão de open pokemon!!!1 ponto -
Tibia Auto = Python 9.86 + scripts
Tibia Auto = Python 9.86 + scripts
Astro boy reagiu a Alexandre Cristian por uma resposta no tópico
1 pontoTibia Auto + python ==>http://www.4shared.com/rar/qG_I3G8x/Tibia_Auto__Python_by_alexandr.html'>Download . Pacotao 143 itens de scripts de caçada + configuraçao Download do pacote Todos Os Downloads Colocados aqui Foi Criado e colocado na web Por Mim Entao todos os creditos sao meus Por favor +Rep pro meu trabalho continua. Comente sua opiniao e muito importante para mim1 ponto -
(Resolvido)[PEDIDO] Como Criar uma Page Igual a Está no Modern AAC
(Resolvido)[PEDIDO] Como Criar uma Page Igual a Está no Modern AAC
ManoTobira reagiu a Hadggar por uma resposta no tópico
1 pontoMesmo, alem da ignorancia irei de ajudar, vá em /xamp/htdocs/system/pages é crie um arquivo como quizer em php. exemplo, eu.php é la adicione: <script src="<?php echo WEBSITE;?>/public/js/ea.js" type="text/javascript"></script> <script src="<?php echo WEBSITE;?>/public/js/slide.js" type="text/javascript"></script> <style> /*preload classes*/ .svw {width: 50px; height: 20px; background: #fff;} .svw ul {position: relative; left: -999em;} /*core classes*/ .stripViewer { position: relative; overflow: hidden; border: 1px groove silver; padding: 1px; overflow: hidden; margin: 0 0 1px 0; } .stripViewer ul { /* this is your UL of images */ margin: 0; padding: 0; position: relative; left: 0; top: 0; width: 1%; list-style-type: none; } .stripViewer ul li { float:left; } .stripTransmitter { overflow: auto; width: 1%; } .stripTransmitter ul { margin: 0; padding: 0; position: relative; list-style-type: none; } .stripTransmitter ul li{ width: 20px; float:left; margin: 0 1px 1px 0; } .stripTransmitter a{ font: bold 10px Verdana, Arial; text-align: center; line-height: 22px; background-color: #CCCCCC; color: #fff; text-decoration: none; display: block; } .stripTransmitter a:hover, a.current{ background: #fff; color: #ff0000; } /*tooltips formatting*/ .tooltip { padding: 0.5em; background: #fff; color: #000; border: 5px solid #dedede; } </style> <script type="text/javascript"> $(window).bind("load", function() { $("div#mygalone").slideView() }); </script> <?php $files = @glob("public/gallery/*.{png,jpg,bmp}", GLOB_BRACE); if(empty($files)) alert("There are no pictures in the gallery."); else { ?> <div id="mygalone" class="svw"> <ul> <?php foreach($files as $file) { echo '<li><img width="540" src="'.WEBSITE.'/'.$file.'"/></li>'; } ?> </ul> </div> <?php } ?> Ai encima você editar ,bota fotos mensagems, agora vá em /xamp/htdocs/template/index.php é abra é la adicione: AGORA VAMOS CONFIGURAR, <li><a href="{$path}/index.php/p/v/eu">eu</a></li> Aonde estar eu -- e o nome do arquivo .php que você criou em /xamp/htdocs/system/pages e Aonde estar "eu" -- eo nome da letra queo player vai clickar, é vai abrir a page, Vc Adiciona a tag <li><a href="{$path}/index.php/p/v/eu">eu</a></li> Abaixo de outro exemplo, tem a de Galeria? adiciona ela embaixo, que vai aparecer Embaixo GOSTOU? REP+1 ponto -
Glossário - Fundamentos de PHP e OTServ
PHP e OTServ Glossário de Fundamentos Básicos Olá! No intuito de expansão do conhecimento da linguagem de programação PHP, tive a idéia de montar um guia prático de iniciação e de manipulação em PHP. Inicialmente, irei abordar os vários conceitos básicos do PHP e, posteriormente, a interação entre PHP e OTServ. Para isso, Boleta(eu) e Lancer irão, ao longo dos dias, atualizar o tópico com novos assuntos, funcionalidades, tutoriais... Portanto, não é um tópico "finito", inicialmente, pois estaremos sempre trazendo novidades. - O Funcionamento do Tópico Para uma boa organização e visualização do tópico, ao final de cada atualização iremos adicionar um "log" com todas as modificações feitas. Esse "log" ficará no fim da página. Também editaremos o título do tópico para que fiquem bem visíveis as mudanças. Teremos, também, um índice, onde ficará muito fácil localizar os conteúdos do tópico. -Observações Importantes Não haverá tolerância em relação aos engraçadinhos que entram no tópico para falar "não entendi nada", "nossa você é bom mesmo", "legal o tópico" ou comentários do gênero. Caso seja visto, encaminharei o caso aos moderadores. O tópico está totalmente aberto à qualquer tipo de dúvidas relacionadas à PHP . Pedidos, dúvidas sobre OTServ ou coisas parecidas estão completamente dispensados. Nós não temos a obrigação de te ajudar. Criamos esse tópico para auxílio e não somos obrigados a tolerar qualquer tipo de indolência, desrespeito e inveja. Entenda que ajudaremos quando possível. Não envie mensagens particulares com perguntas. Caso tenha dúvidas, faça um post aqui . Não faça plagio do tópico. Ele foi criado para a OTServ Networks. Caso retire qualquer conteúdo do mesmo, deixe explícito os devidos créditos. Caso a regra acima não seja respeitada, iremos tomar providências muito severas com os responsáveis. Índice 1 - Introdução 1.1 - O que é PHP 1.2 - Como usar o PHP 1.3 - XAMPP 1.4 - Banco de Dados MySql 2 - Iniciando 2.1 - Página 2.2 - Tag PHP 2.3 – Rotinas ---------------------------------- 1 - Introdução 1.1 - O que é PHP PHP é uma Linguagem de Programação em ambiente WEB onde se idealiza e cria websites. É uma das linguagens mais usadas para esse fim e é muito flexível. Para os programadores com experiência em outras linguagens de programação, PHP se torna uma linguagem simples e de fácil uso. Seu website oficial é o www.php.net, onde se econtra tudo sobre PHP. A versão atual do PHP é a versão 5, e nosso curso é baseado nela. 1.2 - Como usar o PHP O PHP é uma ferramenta que nescessita de um servidor para que funcione. Junto a esse servidor é nescessário, também, um Web Servidor, que faz com que eu, você e qualquer outro possamos acessar páginas na Web. Atualmente, existem Kits práticos que integram ambas as funcionalidades em um único softwares. Nesse mini-curso, usaremos o Xampp, que é um dos melhores que existem no mercado atualmente. 1.3 - XAMPP Site Oficial: http://www.xampp.org/ Download Link (Windows): http://www.apachefriends.org/download.php?xampp-win32-1.6.6a-installer.exe Download Link (Linux): http://www.apachefriends.org/download.php?xampp-linux-1.6.6.tar.gz Faça o download do XAMPP e instale-o em seu computador. Após instalá-lo, inicie o Xampp Control Panel. Em frente à Apache e Mysql, veremos 2 botões, chamados "Start". Clique nos dois e assim iniciaremos ao mesmo tempo o WebServidor + Servidor PHP (Apache) e o Servidor MySQL (Banco de Dados). Ficará mais ou menos assim: Só isso? Sim, só isso. Agora temos um servidor web rodando e um servidor mysql rodando. Para ver a página inicial criada pelo XAMPP, acesse http://localhost/. 1.4 - Banco de Dados MySql Acredito, eu, que a maioria de vocês já ouviu falar em banco de dados. Pois bem, para aqueles que não sabem o que é, um banco de dados serve para guardar informações, desde pequenos números até longos textos. Podemos usar o Banco de dados MySql em qualquer plataforma e de maneira fácil. De acesso de longa distância a acesso local. Será nele que trabalharemos nosso curso. Só para exemplificar, os grandes OTServs (a maioria deles) usam o MySql para guardarem as informações do seu servidor. Contas, guilds, casas, etc. 2 - Iniciando 2.1 - Página Em PHP não possuímos um compilador, como na maioria das linguagens de programação para ambiente windows. Todas as páginas são criadas a partir de arquivos, onde a extensão pode variar. Normalmente, usa-se a extensão .php, que indica que a página exibida está sendo "nutrida" por um servidor PHP. No Xampp, colocamos todos os arquivos dentro da pasta "htdocs" (C:\Xampp\htdocs [o diretório vai depender de onde você instalou o Xampp]) que é a pasta raiz. Aconselho a você que se quiser montar vários sites, crie pastas para cada um. Estes serão acessíveis no link http://localhost/pasta/ . Quando acessamos um link sem especificar o arquivo (como no exemplo acima), o webserver procura o arquivo index (.php, .html, .htm, etc) e exibe seu conteúdo no navegador. Páginas específicas são acessadas assim: http://localhost/pasta/pagina2.php . Além disso, pode-se acessar arquivos em subspastas:http://localhost/pasta/pasta2/pasta3/arquivo5.php . Por questão de segurança, é importante que você mantenha uma página index.php em todas as subpastas do seu site, para que ninguém possa acessar seus arquivos e obtê-los. Por enquanto não abordaremos HTML, mas aconselho a vocês que deem uma olhada nos tópicos referente ao assunto, ainda nessa seção do fórum. 2.2 - Tag PHP O PHP é uma linguagem onde não se executa nenhum código no browser do usuário, ou seja, todas as informações são processadas e executadas no servidor e em seguida são enviados, ou não, dados ao navegador. Para exemplificar bem, imagine que sua professora peça a você um trabalho sobre literatura. Você o faz e entrega para ela apenas o trabalho pronto. Em PHP, temos uma situação parecida: o navegador requisita, ao servidor, uma página (função da professora) e o aluno, após fazer as pesquisas e rascunhos (função do programador), monta o trabalho completo e entrega à professora apenas o resultado de tudo que ele pesquisou, processou, executou (função do servidor). Nosso trabalho, como programadores, é montar os rascunhos e entregá-los de presente ao servidor. Para isso, usamos as páginas, como vimos no tópico acima. O Servidor PHP funcionará da seguinte maneira: Abrirá o arquivo indicado, procurará por todos os códigos PHP que possam existir dentro desse arquivo, processará e, caso haja nescessidade de retorno de informações, "escreverá" na página. É importante ressaltar que o navegador não entra em contado com os códigos feitos pelo programador em nenhum momento, pois esse já terá sido "eliminado" pelo servidor PHP. Uma página Web, em 99,9% das vezes, não é feita só de códigos PHP. Sendo assim, devemos indicar, no arquivo, o espaço reservado à execução dos códigos PHP. Isso é feito da seguinte maneira: Código PHP: <?php ?> Chamada de Tag PHP, esse espaço delimitado criado por nós faz com que todo o código que esteja depois de <?php e antes de ?> seja depurado pelo servidor. É importante resaltar que podemos ter quantas Tags PHP quizermos dentro de nossa página. 2.3 - Rotinas Em PHP, como toda linguagem de programação, temos como base o uso de Rotinas. Em programação, usar uma Rotina quer dizer ordenar ao servidor que execute algo. Para exemplificar, imagine que você esteja com sede e ordena à sua mãe que busque para você um copo d'água. Esse "ordenar" exerce a mesma função da Rotina. Para ser mais claro, vamos ao nosso primeiro exemplo prático. Quando programamos, passamos por 3 fases: a fase onde se escolhe o que vai fazer, a fase em que se cria a ideologia do código, ou seja cria-se, mentalmente, um código falado (algorítimo), e a fase em que se monta o código que executará aquilo que você deseja. Vamos em partes: 1ª Fase: Quero que o programa escreva na tela: "Ser ou não ser, eis a questão". (É o que eu quero fazer) 2ª Fase: Escreve na tela: "Ser ou não ser, eis a questão". (Ordem: Diz que quer escrever na tela um texto, em língua portuguesa) 3ª Fase: Código PHP: <?php echo 'Ser ou não ser, eis a questão'; ?> (Código) E pronto! Temos montada nossa primeira linha de código: Usamos a rotina Echo, que faz com que o servidor insira, à página, certo texto. Logo em seguida, informo ao echo o que quero que ele escreva na tela. Esse complemento, que auxilia a rotina, é chamado de parâmetro (podemos ter vários em uma só rotina). Logo depois, inserimos o ponto e virgula ( ; ) para informarmos que chegamos ao fim daquela rotina. Para testar, cole o código acima em um arquivo qualquer (dentro da pasta htdocs, claro), salve-o e acesse o arquivo (pelo navegador da internet). Creditos: Boleta GodMarini1 ponto
-
PDA By: [GOD Anna]
PDA By: [GOD Anna]
Fatima safadinha reagiu a Wend por uma resposta no tópico
1 pontoEstá Sim Com Limite de Sprites de 4 Milhões *--*1 ponto -
Estou desesperado... Por favor ajudem
Estou desesperado... Por favor ajudem
Ricardo Fronza reagiu a RafaaxD por uma resposta no tópico
1 pontoCara eu tenho esse server aqui com o mesmo problema , mas eu consigo arrumar numa boa .. alem do mais não recomendo esse server não , Pois é da OT projects e como eles não são nada burros .. deu um server pra o @VILDEN ( o que postou o server ) ,com bugs e não tem partes do mapa .. por exemplo Senja , Folda e outras ilhas de gelo estão faltando nesse server .. eu tenho um server muito bom aqui no meu pc GLOBAL .. se quiser adiciona msn que te passo ! Maas se você qer mesmo resolver este problema e usar esse server terá de fazer isto . 1° Vamos fazer todos os downloads necessários. Vamos usar um source TFS pra versão de Tibia 8.60 - Source - Stians Dev-Cpp <> 32bits - Stians Dev-Cpp <> 64bits 2° Abra o Dev-cpp: 3° Clique em Tools > Check For Updates/Packages: 4° Clique em Check For Updates and Upstairs select devpacks.org: 5° Seleciona OpenSSL 0.9.8a e clique em Dowload: 6° Em seguida irá aparecer automaticamente um processo de instalação: Agora seu Dev-cpp está no ponto pra compilar. 7° Use ctrl + o pra abri o .dev: 8° Ele vai estar dentro da pasta da sua source: 9° Então depois que abrir todos os arquivos: 10° Use alt + p logo após aparecerá uma janela ae clique em parameters e adicione, {-D__CONSOLE__} e depois OK: 11° Agora é so compilar ctrl + f9: 12º O seu executavél vai está na pasta da sua source: Pronto compilação concluida Creditos á : Nando Web Natan Beckman RafaaxD AJUDEI ? ACHO QUE SIM NÉ ? ENTÃO DA UM REP+ NÃO CAI O DEDO NÃO !1 ponto