Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 06/03/15 em todas áreas
-
Novo sistema de Cargos e Novas pips!
cs007 e 7 outros reagiu a Administrador por um tópico no fórum
Novo Sistema de Cargos! Como sabem, nosso sistema hierárquico é composto por Estagiários e Moderadores. Acrescentamos o cargo Coordenador com o objetivo de ajudar a manter a ordem dessa hierarquia. O cargo não está em uso no momento mas já pode ser visualizado. O update dessa semana consiste em novas pips para a galera! É isso mesmo, depois de tanto tempo finalmente trocamos as pips. As pips para membros serão implementadas na próxima semana. O que é o sistema de sub-cargos e evolução? O sistema de sub-cargos se resume em divisões onde o membro passa por um processo evolutivo em que será avaliado por um superior. Há cinco níveis de avaliação, ela é dada pelo tempo no cargo e pela determinação. Ao ser aceito na equipe, o membro recebe uma pip. Esta pip irá evoluir após um tempo determinado para uma pip superior, esta, significará que o membro está se determinando para com o fórum. Há fatos que indicam que o método de avaliação (tempo), é invalido para o cargo; nesse sentido, o avanço da pip é dado com o tempo + avaliação da equipe. Em resumo, um membro pode repetir o nível do cargo. Ao alcançar o nível superior do cargo, a equipe realiza uma reunião para decidir se o membro é promovido. CARGO TEMPO NÍVEL Estagiário 1 semanas >1 Estagiário 3 semanas >2 Estagiário 4 semanas >3 Estagiário 6 semanas >4 Estagiário 8 semanas >5 Herói Prévia de ranks para membros (Será adicionado no próximo update) (...) Extra - Separadores de tópico xTibia ATUALIZAÇÕES: - Concertado bug dos icons de mensagem e notificação que ficavam irregulares somente na index; - Nova cor de fonte (links) no fórum; - Concertado bug de irregularidade na descrição do search; - Painel de informação de usuário reformulado; - Removido bug que alterava o layout da página ao adicionar textos maiores que o UIP; - Reformulação de botões (para staff);8 pontos -
RadBR - Tibia como você nunca viu!
Shakkatsun e 4 outros reagiu a Peterwild por um tópico no fórum
Bem-vindos Quem somos? Há 7 anos online e trazendo muita diversão, somos um servidor alternativo do jogo Tibia. Temos como prioridade dedicarmos a qualidade desde o jogo ao site, com uma super estrutura, visando a opinião dos jogadores. Nossas exclusivas ideias fazem de nós um AOTS (Alternative Open Tibia Server) diferente de qualquer outro, com novos itens, novas criaturas, duas novas vocações, mais praticidade com site e npcs atendendo em português, mais lealdade com regras levadas a sério, cheaters rigorosamente proibidos e muito mais. Desvende os mistérios de nosso mapa único, grande e em constante atualização. Venha se divertir, jogue RadBR! Assista ao nosso trailer Melhor servidor O RadBR foi eleito o melhor servidor no concurso público de uma comunidade tibiana em 2012. Sete anos online Nunca tivemos e não pretendemos ter reset. Mapa exclusivo Mapa único e exclusivo, repleto de mistérios, com mais de 10 cidades. Reset level Pioneiro no sistema de reset level. Aumente leveis de uma forma diferente. Estrutura 3 super dedicados no melhor datacenter do mundo. Diferencial Novos itens, monstros, vocações, sistemas e outros, tornando um jogo totalmente novo. Protegido Jogue tranquilo, temos proteção contra ataques DDoS e outros. Fórum Acesse o fórum e encontre entretenimento, suporte, tutoriais e mais. Venda de itens e contas Venda de forma segura seus itens, mesmo que estiver offline, e contas. Cheaters Rigorosamente proibidos, sistema anti-bot ativo. Montarias Dome seu parceiro de aventuras. Tasks Derrote criaturas em troca de recompensas. Eventos Nas principais datas comemorativas e automáticos diariamente. Português Site e NPCs em português. Updates Atualizações periódicas, sempre com novidades. Crie já sua conta! Equipe RadBR5 pontos -
[X] Tutorial - Sign ( Iniciantes )
Soulviling e 2 outros reagiu a Benny por um tópico no fórum
https://www.youtube.com/watch?v=4PV3hFhMULI Tá, antes de tudo, desculpa Eu nunca fiz esse tipo de vídeo, então tava nervoso pra kct HDUAHUAHA Pode perceber pela respiração, pelas vezes que eu esqueci a palavra e tal. E não, eu não tava forçando a voz q Ela é escrota assim mesmo PSD (:3 pontos -
Modificando peso e quantidade do AOL (colocando infinita)
Fir3element e 2 outros reagiu a larissaots por um tópico no fórum
Créditos: Larissa Azhaurn Tutorial items.xml, CTRL+F e coloque amulet of loss. E altere como quiser: <item id="2173" article="an" name="amulet of loss"> ------ Caso queira, pode alterar p/ nome do seu servidor <attribute key="weight" value="PESO DO AMULET" /> ------ EX: 200 <attribute key="slotType" value="necklace" /> <attribute key="charges" value="QUANTIDADE QUE VOCÊ QUER" /> ---- Se quiser infinita, coloque 9999999 </item> OBS. Não achei área específica para esse conteúdo.3 pontos -
Mostrando quem deu look em você (RECOMENDO)
Lordbaxx e um outro reagiu a larissaots por um tópico no fórum
Créditos: EddyHavoc e Slawkens. Objetivo Esse script mostra quem deu look em você. Ao player dar look em você, aparecerá uma mensagem avisando. Tutorial Acesse a pasta MODS e crie um arquivo chamado lookingatyou.xml, coloque isso dentro do arquivo: <?xml version="1.0" encoding="UTF-8"?> <mod name="peeper" version="1.0" author="" contact="" enabled="yes"> <config name="peeper-config"><![CDATA[ -- anonymously or display peeper name? anonymous = "no" -- ignore players with access (will not show message when they look on someone) hiddenAccess = 3 -- message color (type) messageType = MESSAGE_STATUS_DEFAULT ]]></config> <event type="look" name="peeper-event" event="script"><![CDATA[ domodlib('peeper-config') local config = { anonymous = getBooleanFromString(anonymous), hiddenAccess = hiddenAccess, messageType = messageType } function onLook(cid, thing, position, lookDistance) if(isPlayer(thing.uid) and getPlayerAccess(cid) < config.hiddenAccess) then doPlayerSendTextMessage(thing.uid, config.messageType, (config.anonymous and "Someone" or getPlayerName(cid)) .. " is looking at you.") end return true end ]]></event> <event type="login" name="peeper-login" event="buffer"><![CDATA[ registerCreatureEvent(cid, "peeper-event") _result = true ]]></event> </mod>2 pontos -
[TFS 1.x] Removendo House por Tempo OFF
Fir3element e um outro reagiu a larissaots por um tópico no fórum
Créditos: luanluciano93 e Cristofer. Objetivo Esse script é usada para que o player que fique offline pelo tempo editado, perca a house automaticamente. Tutorial Em globalevents/scripts/ crie um arquivo chamado doCheckHouses.lua e coloque esse código dentro: -- <globalevent type="startup" name="doCheckHouses" script="doCheckHouses.lua" /> local function doCheckHouses() local dias = 3 local tempo = os.time() - (dias * 24 * 60 * 60) local registros = db.storeQuery("SELECT `houses`.`owner`, `houses`.`id` FROM `houses`,`players` WHERE `houses`.`owner` != 0 AND `houses`.`owner` = `players`.`id` AND `players`.`lastlogin` <= " .. tempo .. ";") if registros ~= false then local count = 0 print('house leave code') repeat count = count + 1 local owner = result.getNumber(registros, "owner") local houseId = result.getNumber(registros, "id") local house = House(houseId) if house and (owner > 0) then print(house:getName()) house:setOwnerGuid(0) end until not result.next(registros) print('house leave house count:' .. count) result.free(registros) end end function onStartup() addEvent(doCheckHouses, 60 * 1000) return true end A tag do globalevents.xml esta no script como comentário, é só adiciona-lá. Para editar o tempo (em dias) que se o jogador ficar offline ele perderá a house é nessa linha: local dias = 3 OBS: Esse script é iniciado junto com o servidor, logo após aparecerá na distro as houses removidas e a quantidade total.2 pontos -
2 pontos
-
Efeitos texto animado ao upar level, ml, skills...
Furabio e um outro reagiu a larissaots por um tópico no fórum
Créditos: Snowsz Em creaturescripts.xml adicione essa tag: <event type="advance" name="SkillUpText" event="script" value="skilluptext.lua"/> Em creaturescripts/scripts crie um arquivo com o nome "skilluptext.lua" e troque tudo que tem dentro por isso: local config = { [0] = {msg = "Fist UP!", textcolor = 0}, [1] = {msg = "Club UP!", textcolor = 0}, [2] = {msg = "Sword UP!", textcolor = 0}, [3] = {msg = "Axe UP!", textcolor = 0}, [4] = {msg = "Dist UP!", textcolor = 0}, [5] = {msg = "Shield UP!", textcolor = 0}, [6] = {msg = "Fish UP!", textcolor = 0}, [7] = {msg = "Magic UP!", textcolor = 0}, [8] = {msg = "Level UP!", textcolor = 0} } function onAdvance(cid, skill, oldlevel, newlevel) if config[skill] then doSendAnimatedText(getThingPos(cid), config[skill].msg, config[skill].textcolor) end return true end Em creaturescripts/scripts, abra o login.lua e antes do último return true adicione essa função: registerCreatureEvent(cid, "SkillUpText")2 pontos -
Bom dia pessoal, como estão? Você já passou pelo problema de precisar ver algum erro na distro/executável e o erro sumir na Screen (ficar muito pra cima)? Então esse tutorial foi feito pra você! Vamos lá? O tutorial é bem simples. Normalmente para abrir seu servidor, você apenas roda o executável após acessar a screen, certo? Semelhante a: ./theforgottenserver Agora, para salvar o log em um arquivo, faremos o seguinte. Abra a Screen e siga todos os passos que você já sabe normalmente. Porém, na hora de abrir o executável, adicione o seguinte código na frente: >> /root/distro.log 2>&1 Deste modo, pra abrir o servidor você vai utilizar o comando: ./theforgottenserver >> /root/distro.log 2>&1 Depois disso, toda linha que o executável mostrar na tela (putty/screen) será salvo no arquivo /root/distro.log. O nome e localização do arquivo (/root e distro.log) podem ser alterados. Quando precisar ver o conteúdo do arquivo, basta baixá-lo via Filezilla, editá-lo com algum editor de texto do Linux, como por exemplo: nano /root/distro.log Ou ainda acompanhar tudo que acontece no arquivo em tempo real com o comando: tail -f /root/distro.log Atenção! Fique atento ao uso do espaço em disco! O log vai aumentar de tamanho constantemente, visto que a cada erro que der ou player que logar/deslogar salvará mais linhas no arquivo. Caso precise apagar o arquivo, utilize o comando: rm -rf /root/distro.log Espero que seja útil2 pontos
-
Parabéns a essa evolução que o XTibia está passando. Muitos duvidaram da capacidade da equipe atual de levantar o XTibia e fazê-lo ficar onde nunca deveria ter saído, está sendo uma luta todos os dias, porém venho aqui dizer que a equipe atual é capacitada sim e está demonstrando isso dia após dia! Parabéns a todos que estão se empenhado, não só membros da equipe mas aos usuários também.2 pontos
-
*Informações +Edições +Print's +Erros/Bug's +Creditos +Download+Scan QUALQUER ERRO E BUG, COMENTAR NESSE TÓPICO Desculpa pelos erros ortográficos. ah antes que me esqueça ID da vara de pesca 25801 ponto
-
WakiV Otclient Updater O que faz? Esse auto-updater, conta com as funções de: Checar se existe novos updates na inicialização do 'OTC', baixa os updates em diretórios especificados pelo administrador, baixa e extrai arquivos '.ZIP', reinicia o' OTC' apos terminar o download do patch, múltiplos patchs. Instalação: 1 - Crie no diretório raiz de seu site um arquivo '.txt' chamado de 'Update.txt', preencha o arquivo como o arquivo a seguir: http://pastebin.com/cdwnD6qg Obs: nesse pastebin já tem as instruções de como adicionar novos updates. 2 - Baixe o 'Updater Patcher.rar' extraia na pasta raiz do seu otclient. 3 - Depois de ter baixado o 'Updater Mod.rar', extraia e coloque a pasta do mod na pasta 'mods' do seu otclient configure o caminho para o executavel do 'updater patcher' no arquivo .lua. 4 - Agora você precisa ir na pasta raiz do seu 'otclient 'e configurar o arquivo 'Config.ini' com os seguites dados: [Geral] WebSite=http://dragonhertsserver.pusku.com/ - o seu website vai aqui é o site onde fica o 'update.txt' Client=otclient - nome do executavel do seu otclient SiteFile=Update.txt - o nome do arquivo que fica no site marcando os updates 5 - Depois de tudo configurado é só abrir o 'otclient' normalmente que o 'patcher' vai executar junto. use sempre link de download direto para adicionar um novo update. Download: Updater Mod: http://www.mediafire...Updater Mod.rar Updater Patcher: http://www.mediafire...ate patcher.rar Vídeo que mostra como o mod funciona: Imagem: Obs: Se você tem um servidor é quer usar o updater, crie um instalador definindo já o diretório do seu client para o player não precisar configurar o arquivos '.lua' Obs²: Em arquivos compactados use sempre a extenção '.ZIP' Obs³: É preciso o NET framework para rodar. Créditos: vyctor171 ponto
-
Carlin revamp
bandos reagiu a Administrador por um tópico no fórum
http://i.imgur.com/Ne9bsl1.png Tudo o que você precisa é de uMapinha! http://i.imgur.com/bRkveZE.png Carlin Revamp http://i.imgur.com/I7SBZod.png http://i.imgur.com/bRkveZE.png • Informações Gerais http://tecnocomp.com.br/wp-content/uploads/2014/06/infraestrutura.pngVersão do Mapa: 10.35 (v1.8) http://tecnocomp.com.br/wp-content/uploads/2014/06/infraestrutura.pngPeso: 444kb http://tecnocomp.com.br/wp-content/uploads/2014/06/infraestrutura.pngTempo de desenvolvimento: 5-6 semanas. http://i.imgur.com/o7126Xp.pngDesenvolvedores: Daniel & Gothehell http://i.imgur.com/bRkveZE.png Imagens http://i.imgur.com/bRkveZE.png http://i.imgur.com/o7126Xp.pngDownload: MediaFire http://i.imgur.com/o7126Xp.pngScan: VirusTotal (0/54) http://i.imgur.com/bRkveZE.png Bugs? Reporte no tópico que arrumaremos1 ponto -
[8.6 ~ 9.x ] Gesior WebGesiorMudrocK 100%
JustinnoTibianno reagiu a Mudrock por um tópico no fórum
Opa pessoal do XTIBIA tudo bem, tava editando um Gesior para o meu servidor a um tempo mais o projeto acabo dando errado por problemas técnicos, e eu fiquei com meu gesior pronto porem sem utilidade então resolvi trazer para vocês OBSERVAÇÃO : esse gesior erá de um projeto meu, finalizei ele hoje quando peguei uma base que um amigo meu me passo para ajuda-lo, e acabei implementando alguns sistemas e funções, ESSE GESIOR FOI FEITO APARTIR DOS MEUS GOSTOS, ESTOU SOMENTE DISPONIBILIZANDO-O PARA VOCÊS, PORTANTO FIQUEM A VONTADE PARA EDITAR NOMES, IMAGENS, CORES. Bugs arrumados Compatibilidade TFS 0.3 TFS 0.3.8 TFS 0.4 Download em anexo DATABASE : http://www.mediafire.com/download/w3n1nnw0gtmc2k0/mudrock.sql GESIOR : http://www.mediafire.com/download/frfgq96jawas214/mudrockwebgesior.rar Créditos MudrocK Archez Aleh Hollister Matheus ( for top level )1 ponto -
Modelo : Tamanho Tema: Pedido: Tipografia: Cores : Outros : Exemplo : Tamanho : 202x404 px Tema : Naruto Pedido : Avatar Tipografia : GodBeeny Cores : Azul, verde e amarelo Outros : Fonte : Bebas Lembrete : Só vou atender pedidos relacionados ao fórum (Avatar, sign, logo para servidor, background, etc) Qualquer pedido que não tenha nexo nenhum, vou ignorar.1 ponto
-
Olá, pessoal Bem, pra melhorar a seção eu preciso saber o que vocês estão achando, não é ? rs. O Tony já tinha criado um tópico desse, mas era bem antigo .. Então eu tô re-criando. Aqui vocês podem dar sugestões, criticar, e elogiar também (: Atual Equipe : Algumas perguntas que podem ajudar : O que estão achando da seção? estamos sendo atenciosos com vocês no suporte etc ? E da atual equipe ? Qual tipo de conteúdo vocês querem? (Tutoriais, downloads) Enfim, é isso Tópicos já postados : X-Design 20151 ponto
-
[7.1 ATÉ 10.X] TODOS OS COMANDOS! GOD, GM, TUTOR, SENIORS, CM, PLAYERS, HOUSE, GUILD
Furabio reagiu a larissaots por um tópico no fórum
Créditos: Anonimo Introdução • Comandos de GODs • Comandos de Game Masters • Comandos de Community Manager • Comandos de Seniors Tutores • Comandos de Tutores • Comandos de Players • Comandos de House • Comandos de Guild OBS: Todos os comandos mudam de acordo com o servidor jogado. GODs /addskill » Comando para adicionar skills nos players /attr »Bem, com este comando você pode fazer praticamente tudo, desde editar items, monstros até players, direto do seu GOD. /serverdiag » Mostra informações do servidor, como nº de players, NPCs, Monstros e outras informações mais avançadas. /closeserver » Comando que serve para fechar o servidor para players, sendo possivel a entrada apenas de GOD/GM/CM/Tutores. /openserver » Serve para abrir o servidor, quando ele tiver sido fechado com o comando anterior. /promote » Promote acrescenta um nível de acesso à tal player /demote » Demoteabaixa o nível de acesso á tal player (tem que ter promote) /shutdown » Basta executar o comando /shutdown seguido de um dos modelos abaixo (opcional). /mode » Muda o tipo de PVP. /info » Mostra informações detalhadas sobre determinado player. Game Masters (GM) /ghost » Habilitar ou desabilitar invisibilidade para Players. /squelch » Habilita ou desabilita o bloqueio de Mensagens Privadas. /cliport » Você é teleportado para onde você clica /t » Teleporta para o templo. /c » Teleporta um Player ou Monstro para você. /goto » Teleporta você para um player/posição/lugar /a » Teleporta você a uma distância desejada. /kick » Faz logout num player. /send » Manda um player/monstro para determinada posição. /unban » Desfaz o banimento de um determinado player ou account. /town » Envia você ou algum player para a Cidade Natal. /up »Sobe um andar no mapa /down » Desce um andar no mapa /save » Salva o servidor. /clean » Limpa o mapa. /reports » Mostra os reports feitos pelos players. /mc » Procura players ativos em um mesmo IP. Community Managers /s» Sumona um Monstro. /n» Cria um NPC existente. /m »Cria um Monstro existente. /reload »Recarrega scripts e valores. /raid » Executa uma Raid /newtype »Você pode alternar entre todos os outfits disponíveis no servidor /r » Remove o tile ou criatura que estiver a sua frente. /owner » Modifica o dono de alguma casa. /storage »Mostra ou modifica o Storage de algum player. /config »Mostra valores no Config.lua. /i »Cria um item existente. /z »Mostra um Efeito Mágico. /x » Mostra um Efeito de Animação. /y » Mostra um texto animado em cores diferentes. Pode ser útil na definição de cores de alguns scripts. /bc » Mensagem para todos, colorida. /mkick » Desloga vários players Seniors Tutores /wp » Mostra os Waypoints do mapa. /notations » Mostra as Notations de certo player. /gethouse » Mostra o nome da casa de certo player e/ou teleporta. /b » Manda uma mensagem para todos do servidor. Tutores /baninfo » Mostra uma informação detalhada sobre o banimento de certo player. /pos » Mostra a posição do player que usa. Players (comandos básicos) !frags » Mostra o número de frags do player e o tempo. !online » Mostra uma lista de jogadores online. !uptime » Mostra o tempo que o servidor está online. !pvp » Mostra o World type. !q » Mostra a quantidade de dinheiro que o player possiu no inventário. !serverinfo » Mostra informações detalhadas sobre o servidor, como Exp Rate e Skill Rate, por exemplo. /commands » Mostra todos os comandos que o player tem acesso. Comandos de Guild (Só funciona no chat da guild!) !createguild » Membro cria uma Guild. !joinguild » Membro se junta a uma guild (já invitado) !promote » O lider da guild promove alguem dela para "Vice-Leader" !demote » O Lider da guild tira o promote (nivel acima de um membro comum) !invite » O lider da guild invita algum player. !leave » Membro normal sai da guild. !disband » O lider da guild fecha a guild. !nick » O lider da guild adiciona um sub-nick(apelido) para tal membro da guild. !kick » O lider da guild kika algum membro delá. !setrankname » O lider da guild muda os ranks da guild (Exemplo: De Druid para curandeiro) Comandos de House (comandos funcionam dentro da house e alguns fora) aleta som » Invita uma pessoa dentro da sua house e deixa ele(a) abrir a porta. !buyhouse » Compra house !sellhouse » Vende House aleta sio » Invita uma pessoa dentro da sua house sem ele(a) poder abrir a porta. aleta grav »Invita uma pessoa dentro da sua house e deixa ele(a) abrir a porta !leavehouse » Você se "retira" da sua casa. alana sio »Você vai para fora da sua casa. Lista de Maneiras de fazer o comando /attr Items: /attr description -- Muda a descrição de algo, como uma placa. /attr count -- Muda a quantia de algum item, como Crystal Coins. /attr fluidtype -- Nunca usei, logo não sei para que serve. ;] /attr charges -- Muda as cargas das runes. /attr action ou /attr aid -- Muda o action ID de algum item. /attr unique ou /attr uid -- Muda o unique ID de algum item /attr duration - Muda a duração de algum item, como um anel. /attr writer -- Nunca usei, logo não sei para que serve. /attr text -- Muda o texto de algum item. /attr name -- Muda o nome de algum item. /attr pluralname -- Muda o nome de um item para o plural. /attr article -- Nunca usei, logo não sei para que serve. /attr attack -- Muda o ataque de algum item. /attr extraattack -- Adiciona ataque extra em algum item. /attr defense -- Muda a defesa de algum item. /attr extradefense -- Adiciona defesa extra em algum item. /attr armor -- Adiciona "armor" em alguma armadura. /attr attackspeed -- Muda o ataque speed de algum item. /attr hitchance -- Muda a chance de hitar de algum item. /attr shootrange -- Muda a distancia que algum item pode alcançar. /attr depot ou /attr depotid -- Muda o ID do depot. /attr position ou /attr pos -- Nunca usei, logo não sei para que serve. Players: /attr health -- Adiciona vida no player. /attr maxhealth -- Muda a quantidade de vida do player. /attr mana -- Adiciona mana no player. /attr maxmana -- Muda a quantidade de mana do player. /attr basespeed -- Muda a velocidade do player. /attr droploot -- Muda a chance de conseguir loot do player. /attr lossskill -- Muda a velocidade de adiquirir skill do player. /attr cannotmove -- Faz o player não se mover. /attr skull -- Muda a skull do player /attr guildrank -- Muda o guild rank do player. /attr guildnick -- Muda o nick do player. /attr group -- Muda o acesso do player. /attr vocation -- Muda a vocation do player. /attr sex -- Muda o sexo do player. /attr stamina -- Muda a stamina do player. /attr town -- Muda a cidade do player. /attr balance -- Muda a quantidade de dinheiro que o player tem no banco. /attr marriage -- Altera o status de casamento do player. /attr rates -- Muda as rates do player. /attr saving -- Salva o player.1 ponto -
Amuleto
ScythePhantom reagiu a Bruno por uma questão
Tente assim: local porcentagem = 40 -- Porcentagem de dano que será bloqueado local pt_br = true function onStatsChange(cid, attacker, type, combat, value) local lang = {"You lose %d hitpoints (damage protected by amulet: %x).","Você perdeu %d pontos de vida (proteção do amuleto: %x)."} local reset = 9235 if not isCreature(attacker) then return false end if getPlayerSlotItem(cid, 2).itemid == 2218 then if getPlayerStorageValue(cid, reset) == 2 then setPlayerStorageValue(cid, reset, 1) return true else local new_dmg = math.ceil(((100 - porcentagem) / 100) * value) setPlayerStorageValue(cid, reset, 2) doTargetCombatHealth(attacker, cid, combat, -new_dmg, -new_dmg, -1) doPlayerSendCancel(cid, (pt_br and lang[2]:format(new_dmg, value-new_dmg) or lang[1]:format(new_dmg, value-new_dmg))) end end return true end Tópico movido para a seção de dúvidas e pedidos resolvidos.1 ponto -
Item que teleporta o player para house
Lordbaxx reagiu a larissaots por um tópico no fórum
Créditos à MaXwEllDeN. Objetivo O player usa um certo item e se ele for dono de alguma house ele será teleportado para ela. Tutorial actions.xml: <action itemid="7722" event="script" value="tphouse.lua"/> actions/scripts, crie arquivo com nome tphouse.lua e bote isso dentro: function onUse(cid, item, fromPosition, itemEx, toPosition) if hasCondition(cid, CONDITION_INFIGHT) then return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Desculpe, voce esta em batalha.") end if getPlayerLevel(cid) < getConfigInfo("levelToBuyHouse") then return doPlayerSendCancel(cid, "Sorry, not possible.") end if not getHouseByPlayerGUID(getPlayerGUID(cid)) then return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Desculpe, voce nao tem house.") end doTeleportThing(cid, getHouseEntry(getHouseByPlayerGUID(getPlayerGUID(cid)))) doRemoveItem(item.uid, 1) return true end Pronto.1 ponto -
eae galera do xtibia, acabei achando esse refine system que usei em meu servidor 8.54 e resolvi compartilhar com vocês bom vou deixar algumas coisas claras para não ter equivoco de nimguem 1º- Não sou o criador do script e também não sou scripter então não vou poder tirar dúvidas 2º- Não lembro o nome do criador do script caso ele compareça aqui no tópico basta falar que eu ponho os devidos créditos pelo script 3º- Testado na versão 8.54 e não funciona com wands ou rods 4º- Dependendo da dúvida se eu souber responder irei ajudar com maior prazer caso não souber não vou nem responder para não poluir o tópico. 5º- se algum scripter puder fazer uma breve explicação sobre como configura o script ficarei grato pois faz muito tempo que não mexo nele não lembro de quase nada. É isso espero a compreenção de todos vamos ao script espero que gostem e ajude bastante gente xD1 ponto
-
Rainbow outfit (!rainbow on)
leonardo macedo reagiu a larissaots por um tópico no fórum
Créditos à Kamii. Prévia https://vid.me/O1hJ Comando !rainbow on = Ligar o Rainbow Outfit !rainbow off = Desligar o Rainbow Outfit Tutorial Em talkactions/scripts crie um arquivo chamado rainbow.lua e então coloque esse conteúdo dentro: local colors = {94, 81, 79, 88, 18, 11, 92, 128} local storage = 65535 local time = 10 --in miliseconds function onSay(cid, words, param, channel) if(param == "on") then if getPlayerStorageValue(cid, storage) < 1 then if doPlayerRemoveMoney(cid, 0) == TRUE then local event = addEvent(changeOutfit, time, cid) setPlayerStorageValue(cid, storage, 1) return TRUE else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You do not have enough money.") return TRUE end else return TRUE end elseif(param == "off") then if getPlayerStorageValue(cid, storage) > 0 then setPlayerStorageValue(cid, storage, 0) return TRUE else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You do not have rainbow outfit on.") return TRUE end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Use !rainbow on-off.") return TRUE end return TRUE end function changeOutfit(cid) local randomHead = colors[math.random(#colors)] local randomLegs = colors[math.random(#colors)] local randomBody = colors[math.random(#colors)] local randomFeet = colors[math.random(#colors)] local tmp = {} if getPlayerStorageValue(cid, storage) > 0 then local outfit = getCreatureOutfit(cid) tmp = outfit tmp.lookType = outfit.lookType tmp.lookHead = randomHead tmp.lookLegs = randomLegs tmp.lookBody = randomBody tmp.lookFeet = randomFeet tmp.lookAddons = outfit.lookAddons doCreatureChangeOutfit(cid, tmp) local event = addEvent(repeatChangeOutfit, time, cid) return TRUE else stopEvent(event) return TRUE end end function repeatChangeOutfit(cid) local randomHead = colors[math.random(#colors)] local randomLegs = colors[math.random(#colors)] local randomBody = colors[math.random(#colors)] local randomFeet = colors[math.random(#colors)] local tmp = {} if getPlayerStorageValue(cid, storage) > 0 then local outfit = getCreatureOutfit(cid) tmp = outfit tmp.lookType = outfit.lookType tmp.lookHead = randomHead tmp.lookLegs = randomLegs tmp.lookBody = randomBody tmp.lookFeet = randomFeet tmp.lookAddons = outfit.lookAddons doCreatureChangeOutfit(cid, tmp) local event = addEvent(changeOutfit, time, cid) return TRUE else stopEvent(event) return TRUE end end No talkactions.xml coloque: <talkaction words="!rainbow" event="script" value="rainbow.lua"/>1 ponto -
[TFS 1.X] Anti-Magebomb
shept reagiu a larissaots por um tópico no fórum
Créditos: luanluciano93 Objetivo Esse script limita uma quantidade de MC logados por IP, podendo evitar várias coisas, como por exemplo o magebomb. Tutorial Basta criar um arquivo em creaturescript/scripts/ com o nome anti-magebomb.lua e coloque esse código dentro: -- <event type="login" name="Anti-Magebomb" script="anti-magebomb.lua"/> local AccPorIp = 2 function onLogin(player) local mc = 0 for _, verificar in ipairs(Game.getPlayers()) do if player:getIp() == verificar:getIp() then mc = mc + 1 if mc > AccPorIp then return false end end end return true end A tag do creaturescript.xml já esta como comentário no script, é só copiar. OBS: Esse script funciona em TFS 1.1 E 1.2, para TFS 1.0 mude as funções: onLogin(player) --> onLogin(cid) player:getIp() --> Player(cid):getIp()1 ponto -
Novo sistema de Cargos e Novas pips!
Administrador reagiu a Tonynh por um tópico no fórum
Primeiro, gostaria de parabenizar o Daniel pelas positivas mudanças dentro da comunidade. Não tenho frequentado de forma ativa, mas tenho observado o quanto esse fórum vem crescendo ultimamente. As mudanças são boas e positivas, trazem mais confiança a quem já frequentava e a quem está chegando agora. No geral, o fórum está bonito e organizado. Fico feliz em ver o meu xtibia em boas mãos. Parabéns. E ao Benny, vem fazendo um trabalho bacana na minha seção favorita rs Parabéns meu amigo, saudade de você. *Daniel, dá logo a pip pra ele1 ponto -
Está ai um exemplo com mensagem: local config = { minimo = 1, -- Recuperação mínima de mana maximo = 25, -- Recuperação máxima de mana stamina = 1, -- Minutos de stamina a serem recuperados tempo = 10 -- Tempo em segundos da recuperação fica se repetindo } function Player.autoRege(self) if self:getStamina() < 2400 then self:setStamina(self:getStamina() + config.stamina) end local mana = math.random(config.minimo, config.maximo) if self:getMana() ~= self:getMaxMana() then self:addMana(mana) self:say(mana, TALKTYPE_MONSTER_SAY) self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) end event = addEvent(function() self:autoRege() end, config.tempo* 1000) end function onStepIn(creature, item, position, fromPosition) if not creature:isPlayer() then return false end creature:autoRege() return true end function onStepOut(creature, item, position, fromPosition) if not creature:isPlayer() then return false end return stopEvent(event) endTópico movido para a seção de dúvidas e pedidos resolvidos.1 ponto
-
Aumentando loot de bau
damiaotorres reagiu a zipter98 por uma questão
Remova a linha: doPlayerAddExp(cid, exp) Adicione, abaixo de: function onUse(cid, item, fromPosition, itemEx, toPosition) isso: doPlayerAddLevel(cid, 3)1 ponto -
Aumentando loot de bau
damiaotorres reagiu a larissaots por uma questão
Abre o items.xml, CTRL+F, coloque o nome da backpack escolhida, e em: <attribute key="containerSize" value="22" /> Altere o 22 para a quantidade de volume que você desejar. Para alterar o peso: <attribute key="weight" value="1500" /> Modifique o 1500 para o que você preferir.1 ponto -
[TFS 1.X] Anti-Magebomb
larissaots reagiu a Mega Bomb por um tópico no fórum
é algo contra mim??? to brincando, na real que eu sou contra o uso do mc, mas esse script já resolve muita coisa... muito legal1 ponto -
Tento ctz que agora funciona: local config = { minimo = 1, -- Recuperação mínima de mana maximo = 25, -- Recuperação máxima de mana stamina = 1, -- Minutos de stamina a serem recuperados tempo = 10 -- Tempo em segundos da recuperação fica se repetindo } function Player.autoRege(self) if self:getStamina() < 2400 then self:setStamina(self:getStamina() + config.stamina) end if self:getMana() ~= self:getMaxMana() then self:addMana(math.random(config.minimo, config.maximo)) end self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) event = addEvent(function() self:autoRege() end, config.tempo* 1000) end function onStepIn(creature, item, position, fromPosition) if not creature:isPlayer() then return false end creature:autoRege() return true end function onStepOut(creature, item, position, fromPosition) if not creature:isPlayer() then return false end return stopEvent(event) end1 ponto
-
Aumentando loot de bau
damiaotorres reagiu a Furabio por uma questão
local tppos = {x=1095,y=1062,z=7} local exp = 1000000 -- Quanto de experience o player irá ganhar?! local default = {6570,6571,2090} local vocs = {2158,2158,2154,2156,2158,2158,2154,2156} function onUse(cid, item, fromPosition, itemEx, toPosition) for x,i in pairs(default) do doPlayerAddItem(cid,i) doPlayerAddExp(cid, exp) end local bp = doPlayerAddItem(cid,5801,1) local gala = math.random(10,15) for x = 1, gala do doAddContainerItem(bp, 2160, 100) end local add = math.random(1,100) doAddContainerItem(bp, 2160, add) doAddContainerItem(bp, vocs[getPlayerVocation(cid)], 10) local ret = "" for x,i in pairs(default) do if x == 1 then ret = "1 " .. getItemNameById(i) else ret = ret .. ", 1 " ..getItemNameById(i) end end for x,i in pairs(getPlayersOnline()) do doPlayerSendTextMessage(i,19, "O jogador (" .. getPlayerName(cid).. ") completou o (Devil Castle): e ganhou 1000000 de experiências, 1 Chave de Addons, 10 "..getItemNameById(vocs[getPlayerVocation(cid)]).." , "..gala..""..string.sub(add,1,10).." crystal coins, 1 mochila surpresa vermelha e outra 1 mochila surpresa Azul!") end doTeleportThing(cid,tppos) doSendAnimatedText(getPlayerPosition(cid), "Parabéns!", TEXTCOLOR_YELLOW) doSendMagicEffect(getCreaturePosition(cid), math.random(28,28)) doSendMagicEffect(tppos,10) return true end1 ponto -
Sistema de Diminuir Força de Pokémons Selvagens
Bluester reagiu a RodriigoRobson por uma questão
Olha vai em data/lib/levelsystem.lua E procura isso: function setWildPokemonLevel(cid, optionalLevel, optionalStatus, optionalNick, optionalExtraExp) - Logo Abaixo , procure por isso aqui: - Ta vendo essa parte aqui: funciona +- assim o Script: setPlayerStorageValue(cid, 1001, 5 + math.random(off * levelRange * 0.9, off * levelRange * 1.8)) - 5 = 5 de Força Status Offense - + = Sinal de Adição - math.random (Aleatorio) = - LevelRange = levelRange = math.random(pokes[this].wildLvlMin, pokes[this].wildLvlMax) - Ou Seja é o (wildLvlMin e wildLvlMax) configurado la no Configuration.lua - Para diminuir o Offense (Ataque de CorpoxCorpo) é so alterar os Valores: setPlayerStorageValue(cid, 1001, 2 + math.random(off * levelRange * 0.5, off * levelRange * 1.2)) - Se eu fosse voce mexia Somente nessas tres linhas onde tem mais Força do Pokemon: - Reinicia o Server e verifica se mudou alguma coisa!1 ponto -
Novo sistema de Cargos e Novas pips!
Vodkart reagiu a Administrador por um tópico no fórum
Vodkart, segue abaixo. Só não tem o degradê:1 ponto -
Erondino patch v17.1 + Source
nlalglaltlo reagiu a valakas por um tópico no fórum
Client desbloqueado, se pode abrir normalmente http://www.mediafire.com/download/m1k929mhmfiyhho/854+desbloqueado+erondino.rar boa sorte1 ponto -
Alissow Server Bom hoje trago á vocês EVOLUTIONS SERVER! Como a penúltima versão foi baixada mais de 50 mil vezes e espero que essa versão faça o mesmo sucesso. By Alissow Comedinha XedeguX Objetivo do projeto: Criar um servidor com base na versão mais atualizada do tibia com vários sistemas onde o mapa é feito para exploração com um grande nivel de RPG. Sobre o OT/Mapa: Principais quests: -Annihilator -Inquisition Quest -Pits of inferno -Demon Oak -Solar axe quest -HOTA -MPA quest Monstros: -Total monstros: 15000+- Cidades: -10 Cidades -220 Houses+- Raids/Invasões: -Rat -Ghazbaran -Giant spider/The old window -Ferumbras -Morgaroth -Orshabaal Spells: -Magias balanceadas parecidas com a do tibia global Changelog https://github.com/c.../wiki/Changelog Imagens Download Servidor: GitHub Tamanho: ~10 MB Data Pack TFS 1.1 (Executavel) Atenção O Servidor está inacabado. Muitas coisas que foi planejado fazer nele não foram completas. Mas inacabado não quer dizer que não está jogável, quer dizer que faltou detalhar (Ex: x:55 y: 137 z: 9, x: 104 y: 140 z: 7) E algumas coisinhas que não são tao importantes mas estavam planejadas por nós e no futuro podem ser adicionadas como warzone, quests, mais npcs e outros.1 ponto
-
[Pedidos] ~ Beeny
Xtudomuito reagiu a Benny por uma questão
Vai falar com ele ué Até onde sei, não sou o João1 ponto -
[Pedidos] ~ Beeny
Xtudomuito reagiu a Benny por uma questão
Mas gente tu não me da nome da página, nem nada ._.1 ponto -
Novo sistema de Cargos e Novas pips!
Administrador reagiu a Mega Bomb por um tópico no fórum
ta muito legal... minha unica critica é essas linhas cortando as florzinha... mas ta muito legal mesmo1 ponto -
Novo sistema de Cargos e Novas pips!
Administrador reagiu a Lordbaxx por um tópico no fórum
Quando falou não imaginei que fossem ficar tão lindas.. Parabéns!1 ponto -
Novo sistema de Cargos e Novas pips!
Administrador reagiu a larissaots por um tópico no fórum
NOSSA! Ficou tudo perfeito. Parabéns, sério!1 ponto -
Novo sistema de Cargos e Novas pips!
Administrador reagiu a Danihcv por um tópico no fórum
Sistema inovador (pelo menos pra mim) e que tem tudo pra dar certo, afinal só vai estimular mais e mais o espírito de "competição" (não achei a palavra adequada...) que fará cada membro dar cada vez mais o melhor de si para obter o merecido destaque. ^^1 ponto -
Novo sistema de Cargos e Novas pips!
Administrador reagiu a Avuenja por um tópico no fórum
Boa Daniel, parabéns, ficaram lindas as pips! Ansioso para ver as de membros! <3 Avante Xtibia!1 ponto -
Novo sistema de Cargos e Novas pips!
Administrador reagiu a Qwizer por um tópico no fórum
Muito boas, sistema de evolução tbm ficou interessante.1 ponto -
^ usa esse que eu acabei de fazer baseado nesse seu : local items = { [1] = {2512, 2190, 2461, 2649, 2642}, [2] = {2512, 2182, 2461, 2649, 2642}, [3] = {2512, 5907, 2461, 2649, 2642}, [4] = {2512, 2376, 2461, 2649, 2642}, } function onLogin(cid) if getPlayerStorageValue(cid, 30001) < 1 then local item = items[getPlayerVocation(cid)] for i = #item do doPlayerAddItem(cid, item[i], 1) end doPlayerAddItem(cid, 2652, 1) local bag = doPlayerAddItem(cid, 1988, 1) doAddContainerItem(bag, 2160, 3) doAddContainerItem(bag, 2554, 1) doAddContainerItem(bag, 2420, 1) doAddContainerItem(bag, 2120, 1) doAddContainerItem(bag, 2675, 5) doAddContainerItem(bag, 2680, 5) setPlayerStorageValue(cid, 30001, 1) end return true end e ai funcionou ?1 ponto
-
[Showoff] Pokémon Brasil
MuriloCavalcantti reagiu a Benny por um tópico no fórum
Não curti esses efeitos não, boy Tenta colocar um bg com uma textura de pokémon e tal Um bagulho tipo assim1 ponto -
Scroll
ScythePhantom reagiu a Bruno por uma questão
@@ScythePhantom, Tente assim: local config = { storage = 10520, -- use uma storage não utilizada tempo = 5, -- em minutos remItem = false -- remove item ao usar } function onUse(cid, item) if getPlayerSkullType(cid) == SKULL_WHITE or isPlayerPzLocked(cid) then return false, doPlayerSendCancel(cid, "Voce nao pode usar o teleport estando pk ou pz lock.") end local pos, temple = getCreaturePosition(cid), getTownTemplePosition(getPlayerTown(cid), false) if getPlayerStorageValue(cid, config.storage) < os.time () then doTeleportThing(cid, temple, true) setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo * 60)) doSendMagicEffect(pos, CONST_ME_TELEPORT) doSendMagicEffect(getClosestFreeTile(cid, temple), CONST_ME_POFF) if config.remItem then doPlayerRemoveItem(cid, item.itemid, 1) end else return false, doPlayerSendCancel(cid, "Voce so pode usar o teleport a cada " .. (config.tempo / 60) .. " minutos.") end end1 ponto -
Scroll
ScythePhantom reagiu a Furabio por uma questão
local time, storage = 5, 74540 function onUse(cid) if getPlayerSkullType(cid) >= SKULL_WHITE or isPlayerPzLocked(cid) then doPlayerSendTextMessage(cid, 19, "Não pode estar em pz ou estar pk para usar o item") return true end if getPlayerStorageValue(cid, storage) >= os.time() then doPlayerSendTextMessage(cid, 19, "O item só pode ser usado a cada 5 minutos falta" .. getPlayerStorageValue(cid, storage) - os.time() .. " segundos." return true end doRemoveItem(item.uid, 1) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) setPlayerStorageValue(cid, storage, os.time() + (time*60)) return true end1 ponto -
Decidi fazer algo http://3.1m.yt/6FhRU0GC.png1 ponto
-
por enquanto não cara, sinto muito.... mas breve irá ter, estou vendo se consigo lançar mais uma atualização ainda hoje comecei um trabalho de engenharia reversa pra resolver esse problema da incompatibilidade, vai aumentar um pouco o tempo de carregamento, mas acho que não deve durar mais que 4 segundos pra ler os dados do ot.1 ponto
-
Sistema de dominar cidades - Vodkart
warriorfrog reagiu a Vodkart por um tópico no fórum
beleza, obrigado por criar esse tópico com todos os requisitos que pedi. o código é simples e está 90% pronto, assim que eu testar vou postar ok? estou fazendo para servidores 8.6 tfs normal postarei amanha talvez, pois estou de saída e só volto amanha de manha/tarde,1 ponto -
Paint.lua local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end npcHandler:setCallback(CALLBACK_GREET, greetCallback) npcHandler:setMessage(MESSAGE_GREET, 'Bem-vindo à minha loja de pintura |PLAYERNAME| Se quizer pintar sua ball fale paint!') function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local pokesalive = {'11826', '11832', '11835', '11829', '554', '11452', '12596', '12599', '11826', '11829', '11835', '11832', '12575'} if(msgcontains(msg, 'paint')) then selfSay('Você quer pintar a sua ball?', cid) talkState = 1 elseif(msgcontains(msg, 'yes') and talkState == 1) then selfSay('Olá, você pode escolher: Pokeball, Greatball, Superball, Ultraball.', cid) talkState = 2 elseif(msgcontains(msg, 'no') and talkState == 1) then selfSay('Volte outra vez!', cid) talkState = 0 npcHandler:releaseFocus(cid) elseif((msgcontains(msg, 'Pokeball') or msgcontains(msg, 'Poke ball') or msgcontains(msg, 'pokeball') or msgcontains(msg, 'poke ball')) and talkState == 2) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then selfSay('Você realmente quer pintar a sua bola como um Pokeball? Ele vai te custar 800 dólares!', cid) talkState = 3 else selfSay('Você deve colocar a bola fechada no slot.', cid) talkState = 0 end elseif(msgcontains(msg, 'yes') and talkState == 3) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then if doPlayerRemoveMoney(cid,80000) == true then selfSay('Boa escolha, a partir de agora um, ele vai olhar como uma Pokeball! Há qualquer outra coisa que eu possa ajudá-lo?', cid) doTransformItem(getPlayerSlotItem(cid, 8).uid, 11826) talkState = 0 else selfSay('Sorry '.. getCreatureName(cid) ..', mas você não tem dinheiro suficiente.', cid) talkState = 0 end else selfSay('Por favor, mantenha sua bola fechada na slot.', cid) talkState = 0 end elseif((msgcontains(msg, 'Greatball') or msgcontains(msg, 'Great ball') or msgcontains(msg, 'greatball') or msgcontains(msg, 'great ball')) and talkState == 2) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then selfSay('Você realmente quer pintar a sua bola como um Greatball? Ele vai te custar 300 dólares!', cid) talkState = 4 else selfSay('Você deve colocar a bola fechada no slot.', cid) talkState = 0 end elseif(msgcontains(msg, 'yes') and talkState == 4) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then if doPlayerRemoveMoney(cid,30000) == true then selfSay('Boa escolha, a partir de agora um, ele vai olhar como uma Greatball! Há qualquer outra coisa que eu possa ajudá-lo?', cid) doTransformItem(getPlayerSlotItem(cid, 8).uid, 11832) talkState = 0 else selfSay('Sorry '.. getCreatureName(cid) ..', mas você não tem dinheiro suficiente.', cid) talkState = 0 end else selfSay('Por favor, mantenha sua bola fechada na slot.', cid) talkState = 0 end elseif((msgcontains(msg, 'Superball') or msgcontains(msg, 'Super ball') or msgcontains(msg, 'super ball') or msgcontains(msg, 'superball')) and talkState == 2) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then selfSay('Você realmente quer pintar a sua bola como um Superball? Ele vai te custar 700 dólares!', cid) talkState = 5 else selfSay('Você deve colocar a bola fechada no slot.', cid) talkState = 0 end elseif(msgcontains(msg, 'yes') and talkState == 5) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then if doPlayerRemoveMoney(cid,70000) == true then selfSay('Boa escolha, a partir de agora um, ele vai olhar como uma Superball! Há qualquer outra coisa que eu possa ajudá-lo?', cid) doTransformItem(getPlayerSlotItem(cid, 8).uid, 11835) talkState = 0 else selfSay('Sorry '.. getCreatureName(cid) ..', mas você não tem dinheiro suficiente.', cid) talkState = 0 end else selfSay('Por favor, mantenha sua bola fechada na slot.', cid) talkState = 0 end elseif((msgcontains(msg, 'Ultra ball') or msgcontains(msg, 'Ultraball') or msgcontains(msg, 'ultra ball') or msgcontains(msg, 'ultraball')) and talkState == 2) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then selfSay('Você realmente quer pintar a sua bola como um Ultraball? Ele vai te custar 500 dólares!', cid) talkState = 6 else selfSay('Você deve colocar a bola fechada no slot.', cid) talkState = 0 end elseif(msgcontains(msg, 'yes') and talkState == 6) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then if doPlayerRemoveMoney(cid,50000) == true then selfSay('Boa escolha, a partir de agora um, ele vai olhar como uma Ultraball! Há qualquer outra coisa que eu possa ajudá-lo?', cid) doTransformItem(getPlayerSlotItem(cid, 8).uid, 11829) talkState = 0 else selfSay('Sorry '.. getCreatureName(cid) ..', mas você não tem dinheiro suficiente.', cid) talkState = 0 end else selfSay('Por favor, mantenha sua bola fechada na slot.', cid) talkState = 0 end elseif((msgcontains(msg, 'sdfdsfdsfsdf') or msgcontains(msg, 'dfsdfsdf') or msgcontains(msg, 'sdfsdfsdf') or msgcontains(msg, 'sdfsdfsdfsdf')) and talkState == 2) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then selfSay('Você realmente quer pintar a sua bola como um Masterball? Ele vai te custar 700 dólares!', cid) talkState = 7 else selfSay('Você deve colocar a bola fechada no slot.', cid) talkState = 0 end elseif(msgcontains(msg, 'yes') and talkState == 7) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then if doPlayerRemoveMoney(cid,70000) == true then selfSay('Boa escolha, a partir de agora um, ele vai olhar como uma Masterball! Há qualquer outra coisa que eu possa ajudá-lo?', cid) doTransformItem(getPlayerSlotItem(cid, 8).uid, 554) talkState = 0 else selfSay('Sorry '.. getCreatureName(cid) ..', mas você não tem dinheiro suficiente.', cid) talkState = 0 end else selfSay('Por favor, mantenha sua bola fechada na slot.', cid) talkState = 0 end elseif((msgcontains(msg, 'sdfsdf') or msgcontains(msg, 'ghfghfgh') or msgcontains(msg, 'fghjkuk') or msgcontains(msg, 'sdfsdfsdf')) and talkState == 2) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then selfSay('Você realmente quer pintar a sua bola como um Loveball? Ele vai te custar 300 dólares!', cid) talkState = 8 else selfSay('Você deve colocar a bola fechada no slot.', cid) talkState = 0 end elseif(msgcontains(msg, 'yes') and talkState == 8) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then if doPlayerRemoveMoney(cid,30000) == true then selfSay('Boa escolha, a partir de agora um, ele vai olhar como uma Loveball! Há qualquer outra coisa que eu possa ajudá-lo?', cid) doTransformItem(getPlayerSlotItem(cid, 8).uid, 12593) talkState = 0 else selfSay('Sorry '.. getCreatureName(cid) ..', mas você não tem dinheiro suficiente.', cid) talkState = 0 end else selfSay('Por favor, mantenha sua bola fechada na slot.', cid) talkState = 0 end elseif((msgcontains(msg, 'gfhfghfgh') or msgcontains(msg, 'fghgfhgfh') or msgcontains(msg, 'fghgfhgfh') or msgcontains(msg, 'gfhfghfgh')) and talkState == 2) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then selfSay('Você realmente quer pintar a sua bola como um Luaball? Ele vai te custar 700 dólares!', cid) talkState = 9 else selfSay('Você deve colocar a bola fechada no slot.', cid) talkState = 0 end elseif(msgcontains(msg, 'yes') and talkState == 9) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then if doPlayerRemoveMoney(cid,70000) == true then selfSay('Boa escolha, a partir de agora um, ele vai olhar como uma Luaball! Há qualquer outra coisa que eu possa ajudá-lo?', cid) doTransformItem(getPlayerSlotItem(cid, 8).uid, 12596) talkState = 0 else selfSay('Sorry '.. getCreatureName(cid) ..', mas você não tem dinheiro suficiente.', cid) talkState = 0 end else selfSay('Por favor, mantenha sua bola fechada na slot.', cid) talkState = 0 end elseif((msgcontains(msg, 'gfhfghgfh') or msgcontains(msg, 'fghfghfgh') or msgcontains(msg, 'gfhgfhfgh') or msgcontains(msg, 'fghgfhgfh')) and talkState == 2) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then selfSay('Você realmente quer pintar a sua bola como um Duskball? Ele vai te custar 500 dólares!', cid) talkState = 10 else selfSay('Você deve colocar a bola fechada no slot.', cid) talkState = 0 end elseif(msgcontains(msg, 'yes') and talkState == 10) then if isInArray(pokesalive, getPlayerSlotItem(cid,8).itemid) then if doPlayerRemoveMoney(cid,50000) == true then selfSay('Boa escolha, a partir de agora um, ele vai olhar como uma Duskball! Há qualquer outra coisa que eu possa ajudá-lo?', cid) doTransformItem(getPlayerSlotItem(cid, 8).uid, 12599) talkState = 0 else selfSay('Sorry '.. getCreatureName(cid) ..', mas você não tem dinheiro suficiente.', cid) talkState = 0 end else selfSay('Por favor, mantenha sua bola fechada na slot.', cid) talkState = 0 end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) '11826', '11832', '11835', '11829', '554', '11452', '12596', '12599', '11826', '11829', '11835', '11832', '12575' - BALLS paint.xml <?xml version="1.0" encoding="UTF-8"?> <npc name="Deka" script="paint.lua" walkinterval="0" floorchange="0"> <health now="100" max="100"/> <look type="513" head="116" body="54" legs="114" feet="0" addons="2"/> <parameters> </parameters> </npc>1 ponto
-
Nome: Perfect Upgrade System Tipo: Biblioteca, Action, Sistema Autor: Oneshot Essa é a versão final do Perfect Refine System ou Perfect Upgrade System criado por mim. É um sistema construído em cima de funções em POO (orientação a objetos), o que o torna muito versátil, possibilitando a outros programadores/scripters criarem seus próprios sistemas com base na biblioteca. A função do sistema é simples. Não passa de um sistema de refino, presente em todos os servidores, onde você usa um item em um equipamento e este fica mais forte e ganha um nome caracterizando o nível de força - bem clichê - mas muito interessante. Meu sistema é um pouco diferente dos outros, pois possui algumas características exclusivas, listadas abaixo: O nível máximo configurável é praticamente ilimitado O sistema funciona com armas de combate corpo-a-corpo, bows e crossbows. O refino pode falhar, não acontecendo nada, regredindo o nível ou resetando ele. Há um sistema nativo de broadcasts, que são enviados quando um jogador consegue refinar um equipamento até um certo nível ou maior. As chances são configuradas manualmente e sua randomização é muito precisa. Há dois modos de instalar o sistema em seu servidor, o primeiro é baixar a pasta com os scripts necessários e apenas copiar as chaves nos arquivos XMLs ou então seguir o curto tutorial de instalação. Crie um arquivo chamado upgradesystem.lua na pasta data/lib e copie o conteúdo abaixo: --[[ PERFECT UPGRADE SYSTEM 2.0 Criado por Oneshot É proibido a venda ou a cópia sem os devidos créditos desse script. ]]-- UpgradeHandler = { levels = { [1] = {100, false, false}, [2] = {90, false, false}, [3] = {75, false, false}, [4] = {60, true, false}, [5] = {45, true, false}, [6] = {30, true, false}, [7] = {25, true, false}, [8] = {20, true, true}, [9] = {15, true, true}, [10] = {10, true, true}, [11] = {10, true, true}, [12] = {5, true, true} }, broadcast = 7, attributes = { ["attack"] = 2, ["defense"] = 1, ["armor"] = 1 }, message = { console = "Trying to refine %s to level +%s with %s%% success rate.", success = "You have upgraded %s to level +%s", fail = "You have failed in upgrade of %s to level +%s", downgrade = "The upgrade level of %s has downgraded to +%s", erase = "The upgrade level of %s has been erased.", maxlevel = "The targeted %s is already on max upgrade level.", notupgradeable = "This item is not upgradeable.", broadcast = "The player %s was successful in upgrading %s to level +%s.\nCongratulations!!", invalidtool = "This is not a valid upgrade tool.", toolrange = "This upgrade tool can only be used in items with level between +%s and +%s" }, tools = { [8306] = {range = {0, 10}, info = {chance = 0, removeable = true}}, }, isEquipment = function(self) local weaponType = self:getItemWeaponType() return ((weaponType > 0 and weaponType < 7) or self.item.armor ~= 0) end, setItemName = function(self, name) return doItemSetAttribute(self.item.uid, "name", name) end, chance = function(self) local chances = {} chances.upgrade = (self.levels[self.item.level + 1][1] or 100) chances.downgrade = (self.item.level * 5) chances.erase = (self.item.level * 3) return chances end } function UpgradeHandler:new(item) local obj, ret = {} obj.item = {} obj.item.level = 0 obj.item.uid = item.uid for key, value in pairs(getItemInfo(item.itemid)) do obj.item[key] = value end ret = setmetatable(obj, {__index = function(self, index) if _G[index] then return (setmetatable({callback = _G[index]}, {__call = function(self, ...) return self.callback(item.uid, ...) end})) else return UpgradeHandler[index] end end}) if ret:isEquipment() then ret:update() return ret end return false end function UpgradeHandler:update() self.item.level = (tonumber(self:getItemName():match("%+(%d+)")) or 0) end function UpgradeHandler:refine(uid, item) if not self.item then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.notupgradeable) return "miss" end local tool = self.tools[item.itemid] if(tool == nil) then doPlayerSendTextMessage(uid, MESSAGE_EVENT_DEFAULT, self.message.invalidtool) return "miss" end if(self.item.level > #self.levels) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.maxlevel:format(self.item.name)) return "miss" end if(self.item.level < tool.range[1] or self.item.level >= tool.range[2]) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.toolrange:format(unpack(tool.range))) return "miss" end local chance = (self:chance().upgrade + tool.info.chance) doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.console:format(self.item.name, (self.item.level + 1), math.min(100, chance))) if(tool.info.removeable == true) then doRemoveItem(item.uid, 1) end if chance * 100 > math.random(1, 10000) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_ORANGE, self.message.success:format(self.item.name, (self.item.level + 1))) if (self.item.level + 1) >= self.broadcast then doBroadcastMessage(self.message.broadcast:format(getCreatureName(uid), self.item.name, (self.item.level + 1))) end self:setItemName((self.item.level > 0 and self:getItemName():gsub("%+(%d+)", "+".. (self.item.level + 1)) or (self:getItemName() .." +1"))) for key, value in pairs(self.attributes) do if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then doItemSetAttribute(self.item.uid, key, (self.item.level > 0 and getItemAttribute(self.item.uid, key) or self.item[key]) + value) end end return "success" else if(self.levels[self.item.level][3] == true and (self:chance().erase * 100) > math.random(1, 10000)) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.erase:format(self.item.name)) self:setItemName(self.item.name) for key, value in pairs(self.attributes) do if self.item[key] > 0 then doItemSetAttribute(self.item.uid, key, self.item[key]) end end elseif(self.levels[self.item.level][2] == true and (self:chance().downgrade * 100) > math.random(1, 10000)) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.downgrade:format(self.item.name, (self.item.level - 1))) self:setItemName((self.item.level == 1 and self.item.name or self:getItemName():gsub("%+(%d+)", "+".. (self.item.level - 1)))) for key, value in pairs(self.attributes) do if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then doItemSetAttribute(self.item.uid, key, (self.item[key] + value * (self.item.level - 1))) end end else doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.fail:format(self.item.name, (self.item.level + 1))) end return "fail" end end Crie um arquivo chamado upgrade.lua em data/actions/scripts e cole o conteúdo abaixo: function onUse(cid, item, fromPosition, itemEx, toPosition) if isCreature(itemEx.uid) then return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end local obj = UpgradeHandler:new(itemEx) if(obj == false) then return doPlayerSendCancel(cid, UpgradeHandler.message.notupgradeable) end local status = obj:refine(cid, item) if status == "success" then --doSendAnimatedText(toPosition, "Success!", COLOR_GREEN) doSendMagicEffect(toPosition, CONST_ME_MAGIC_GREEN) elseif status == "fail" then --doSendAnimatedText(toPosition, "Fail!", COLOR_RED) doSendMagicEffect(toPosition, CONST_ME_POFF) else doSendMagicEffect(toPosition, CONST_ME_POFF) end return true end No arquivo actions.xml, cole a seguinte linha: <action itemid="8306" event="script" value="upgrade.lua"/> Para adicionar mais níveis de refino no sistema, edite a seguinte tabela: levels = { [1] = {100, false, false}, [2] = {90, false, false}, [3] = {75, false, false}, [4] = {60, true, false}, [5] = {45, true, false}, [6] = {30, true, false}, [7] = {25, true, false}, [8] = {20, true, true}, [9] = {15, true, true}, [10] = {10, true, true} }, Por padrão, ela já está configurado como na maioria dos MMORPGs, 10 níveis de refino, com chances de sucesso, regressão e "quebra". Mas se você quiser, por exemplo, adicionar mais dois níveis, siga o modelo, sempre colocando uma vírgula no final com exceção da última linha da tabela: levels = { [1] = {100, false, false}, [2] = {90, false, false}, [3] = {75, false, false}, [4] = {60, true, false}, [5] = {45, true, false}, [6] = {30, true, false}, [7] = {25, true, false}, [8] = {20, true, true}, [9] = {15, true, true}, [10] = {10, true, true}, [11] = {10, true, true}, [12] = {5, true, true} }, O primeiro valor é chance de sucesso, o segundo se o item pode regredir na tentativa e o terceiro é se o item para "quebrar" (perder todo o nível de refino). Para criar novas ferramentas (itens) de refinar, configure a tabela abaixo: tools = { [8306] = {range = {0, 10}, info = {chance = 0, removeable = true}}, }, Seguindo o mesmo esquema da tabela anterior, vírgulas em todas as linhas com exceção da última, seguindo o modelo abaixo. Por exemplo, uma ferramenta de ID 8303 que refine do level +6 ao +10, que dê 10% de chance bônus e que seja finita, eu faço assim: tools = { [8306] = {range = {0, 10}, info = {chance = 0, removeable = true}}, [8310] = {range = {6, 10}, info = {chance = 10, removeable = true}} }, Em breve vídeo de demonstração com sistema em funcionamento. Perfect Upgrade System.rar1 ponto