Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''script''.

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Projetos Patrocinados
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Downloads
    • Recursos
    • Suporte
    • Pedidos
    • Show-Off
    • Tutoriais
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Encontrar resultados em...

Encontrar resultados que contenham...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Sou

  1. Bom dia turma do Xtibia. Venho trazer um script que fiz para um usuário de outro fórum, abaixo seguem maiores informações sobre. Introdução: Bom, este script simula a máquina de Cassino conhecida como Cassino Slots, pra quem não conhece é a máquina que se encontra no spoiler abaixo: Como funciona? O jogador precisa escolher 1 (um) dos 10 (dez) itens disponíveis (da para configurar a quantidade de itens) como seu Item da Sorte, e após feito isso, terá que girar a alavanca e torcer para que a máquina sorteie 3 itens repetidos igual ao que o jogador em questão escolheu. Para tornar um pouco mais fácil de vencer, criei para que a máquina dê pequenos brindes à quem acertar 1 ou 2 itens dos sorteados (configurável). Como jogar? Para jogar é simples, como desenvolvi todo script em apenas um arquivo, para facilitar na criação, na instalação e até mesmo na jogabilidade, o jogo se baseia na posição em que o jogador está para identificar qual ação executar. Selecionar Item da Sorte: com seu personagem virado para baixo (sul), clique na alavanca e automaticamente o item da sorte aparecerá na mesa configurada no script, caso queira outro item, basta ir usando a alavanca até encontrar o item desejado. Como Jogar: Após ter selecionado seu item da sorte, que deve estar à mostra em cima da mesa própria, basta virar seu personagem para cima (norte) e clicar novamente na alavanca. E se virar esquerda ou direita?: Nada acontecerá, apenas uma mensagem ensinando como jogar será enviada para que o jogador se oriente. Dicas de instalação! Sugiro que quando for criar o mapa para o evento, não faça como do vídeo, pois os itens criados nas mesas não estão com atributos para que não possam ser movidos, sendo assim é provável que jogadores de má fé venham a roubar itens... Faça como a imagem abaixo: Instalando: Basta criar um arquivo na pasta “data/actions/scripts” chamado “cassino_slots.lua” e adicionar o código abaixo dentro: Agora em “actions.xml” adicione a tag abaixo: Agora basta configurar de acordo com as informações disponíveis no início do script. Vejam o vídeo demonstrativo do Sistema em funcionamento. Criado por: Adriano Swatt'
  2. Nome: Advanced Poll System Tipo: Talkaction Autor: Oneshot Fala, meus queridos. Peregrinando pela seção de Pedidos e Dúvidas, vi um pedido do membro sarioyana que despertou minha vontade de programar sistemas um pouco mais elaborados. O pedido dele se trata de um sistema de votação, onde o responsável pelo servidor pode iniciar uma votação com quantas opções desejar. Fiz algo bem simples, você só precisa configurar os storages no ínicio do script, caso você já esteja usando os que estão por padrão. Abra seu arquivo talkactions.xml e adicione isso: <talkaction log="yes" words="/newpoll;/endpoll" access="5" event="script" value="pollsystem.lua"/> <talkaction words="/vote;/poll" event="script" value="pollsystem.lua"/> Crie um novo arquivo chamado pollsystem.lua em data/talkactions/scripts e adicione isso: local POLL_STORAGE = 80000 local OPTIONS_STORAGE = 80001 local PLAYER_STORAGE = 80000 local function getTotalVotes() local options = table.unserialize(getStorage(OPTIONS_STORAGE)) local amount = 0 for _, option in ipairs(options) do amount = amount + option[2] end return amount end local function getMostVotedOption() local options = table.unserialize(getStorage(OPTIONS_STORAGE)) local value, ret = 0 for _, option in ipairs(options) do if option[2] > value then value = option[2] ret = option[1] end end return ret end function onSay(cid, words, param, channel) param = param or "" if param == "" and not words == "/poll" then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The command ".. words .." need parameters.") end local parameters, vote = {} if(words == "/newpoll") then if getStorage(POLL_STORAGE) ~= -1 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, but there is a poll in progress.\nIf you want to start a new poll, type /endpoll.") end parameters = string.explode(param, ",") if #parameters < 3 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The command /newpoll needs a poll and at least two options.") end if parameters[1] then local options = {} for i = 2, #parameters do table.insert(options, {parameters[i], 0}) end if #options < 2 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Insert at least two options after the poll") end doSetStorage(POLL_STORAGE, parameters[1]) options = table.serialize(options) doSetStorage(OPTIONS_STORAGE, options) doBroadcastMessage("A new poll is in progress with the title '".. getStorage(POLL_STORAGE) .."?'!\nSee the status with /poll and vote with /vote.") end elseif(words == "/vote") then vote = tonumber(param) or -1 local options = table.unserialize(getStorage(OPTIONS_STORAGE)) if getStorage(POLL_STORAGE) == -1 then return doPlayerSendCancel(cid, "There is not a poll in progress.") end if vote == -1 then return doPlayerSendCancel(cid, "You need to choose a option to vote.") end if getCreatureStorage(cid, PLAYER_STORAGE) == 1 then print(getCreatureStorage(cid, PLAYER_STORAGE)) return doPlayerSendCancel(cid, "You cannot vote two times.") end if vote > #options then return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end options[vote][2] = options[vote][2] + 1 doSetStorage(OPTIONS_STORAGE, table.serialize(options)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have voted in the option ".. options[vote][1] .." successfully!") doCreatureSetStorage(cid, PLAYER_STORAGE, 1) elseif(words == "/poll") then local options = table.unserialize(getStorage(OPTIONS_STORAGE)) if getStorage(POLL_STORAGE) == -1 then return doPlayerSendCancel(cid, "There is not a poll in progress.") end local text = "ADVANCED poll SYSTEM\n\n".. getStorage(POLL_STORAGE) .."?\n" local count = 1 for _, option in ipairs(options) do text = text .."\n#".. count .." ".. option[1] .." ".. (getTotalVotes() == 0 and 0 or math.floor((option[2]/getTotalVotes()) * 100)) .."%\n" count = count + 1 end doPlayerPopupFYI(cid, text) elseif(words == "/endpoll") then if getStorage(POLL_STORAGE) == -1 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "There is not a poll to be ended.") end if not getMostVotedOption() then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wait at least one vote to end this poll.") end doBroadcastMessage("The poll '".. getStorage(POLL_STORAGE) .."?' has been finished!\nThe most voted option was ".. getMostVotedOption() ..".") doSetStorage(POLL_STORAGE, -1) doSetStorage(OPTIONS_STORAGE, -1) for _, player in ipairs(getPlayersOnline()) do doCreatureSetStorage(player, PLAYER_STORAGE, -1) end db.executeQuery("UPDATE `player_storage` SET value = -1 WHERE `key` = ".. PLAYER_STORAGE ..";") end return true end E pronto, o sistema está instalado. Basta agora no jogo com um GOD digitar: /newpoll pergunta,opção1,opção2,opção3,... E para finalizar a enquete /endpoll Jogadores podem usar os comandos abaixo para visualizar o estado da enquete e votar, respectivamente. /poll /vote O comando /vote deve ser seguido do número da opção que aparece no comando /poll Irei postar em breve um vídeo, fiquem ligados. Um grande abraço.
  3. venho aqui postar a vocês um script de slot com porcentagens de hp,ml,distance e skills, eu achava que aqui na xtibia ja tinha esse script eu procurei procurei e não achei nada... então resolvi procurar em outro forum para postar aqui, porque ja vi muitas pessoas procurando ele, se o script não agradar alguem ou se ja tem esse script aqui... espero que reportem só quero ajudar tanto faz se tomo ban ou não vlw. este script faz a seguinte função, ele adiciona um atribute do items.xml no seu equipamento aleatoriamente e voce pode configurar para quantos slots quizer, por exemplo eu uso o item 8300 em uma demon legs, pode vir 2% de hp ou de ml de club axe sword= CAS ou distance. por enquanto eu não sei configurar para arrumar as porcentagens e aprimorar mais o script mais ja que tem tantas pessoas procurando ele postei aquii para quem quizer modificar e obter no proprio servidor esta aqui ^^ eu tive uma ideia para quem quizer modificar tambem que é assim, faz para o script ter 1 item para cada funçao de hp ml mp skill e distance, e uma porcentagem certa nao randomica seria otimo alguem conseguir isso obrigado <3 abraços creditos esta no final da postagem. Primeiro abra a pasta data/action/action.xml do seu ot e adicione esta tag: <action itemid="8300" event="script" value="slot.lua"/> lembrando que o numero que eu colokei "8300" é o id do item que vai dar use nos equipamentos. agora abra a pasta data/action/scripts copie um arquivo qualquer de .lua e cole renomeie para slot e adicione isto dentro. Depois que fizer isto abra o arquivo data/creaturescripts/creaturescripts.xml e adicione esta tag : <event type="login" name="SlotLogin" script="slot.lua"/> depois vc abre a pasta data/creaturescripts/scripts copie um arquivo .lua qualquer e cole depois renomeie para slot e adicione esta tag dentro do arquivo: pronto o systema de slot esta no seu servidor Creditos:Mock
  4. Hoje irei postar um Script de Catch Por Skill Configurado No "Sword Fighting" do Seu OLDC/OTC, por NextBr vamos lá: Resumo: Quanto Maior o Skill "Catching" Maior a chance de Captura do Pokemon! OBS: Eu nao Vou Postar o Script Completo Pois de Cada (PDA) ou (PDA - COM PokeLevel) é Diferente um do Outro, Eu So vou Ensinar a Voces a como Adicionar o Sistema em Seus Servidores! Testado em: - Pokemon Dash Advanced - Não é difícil adaptar para outros servidores. Primeiro Vai em Data/Lib/catchsystem.lua e Procure por essa Funçao: Na Parte aonde manda a MSG de que Voce "capturou um Pokemon" e "Capturou um Pokemon e Foi para o CP" add Isso Abaixo dessas Msg: - Resumo: doPlayerAddSkillTry(cid,2,10) --- Quando Capturar um Pokemon vai Ganhar 10% de Skill "2". - Obs: No meu Client o Skill Catching Esta no Skill "Sword Fighting" Bom logo após você vai em data/actions/catch.lua e no começo do Script adiciona isto: Agora Procure essa Funçao: local catchinfo = {} E Troca por Isso: -OBS: O Script é Bem Basico. Dar Para adicionar varios Coisas Como (Ganhar EXP Dependendo do Skill/Almentar Chance de Catch para Premium Account e etc...) Imagens: OBS: Só vai ganhar Skill se você Capturar o Pokemon e Recomendo á vocês Deixar o catch BAIXO! Por que o script faz a soma de rate um Exemplo: Pokeball Rate: 50 Skill Cathing Rate (com 25 de Skill Cathing) : 100 Somar: 50+100 = 150 de Rate o Jogador vai ter [script Atualizado Dia 25/01/2015] [+] Creditos: NextBR
  5. Créditos: luanluciano93 HEAL - Se o life dele chega a 50k, ele solta um aviso, e depois de 5 segundos heala 300k. Crie um arquivo em creaturescripts/scripts/ com o nome heal_gaz.lua e coloque esse código: -- <event type="healthchange" name="HealGaz" script="heal_gaz.lua"/> local config = { life_ative = 50000, life_add = 300000, seconds_ative = 5, gStorage = 90702, } local function Uheal(cid) local gaz = Monster(cid) gaz:addHealth(config.life_add) gaz:say("Gaz'haragoth HEALS himself!", TALKTYPE_MONSTER_SAY) gaz:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED) Game.setStorageValue(config.gStorage, 0) end function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) if attacker then if creature:getHealth() < config.life_ative and Game.getStorageValue(config.gStorage) < 1 then creature:say("Gaz'haragoth beginns to draw on the nightmares to HEAL himself!", TALKTYPE_MONSTER_SAY) addEvent(Uheal, 1000 * config.seconds_ative, creature.uid) Game.setStorageValue(config.gStorage, 1) end end return primaryDamage, primaryType, secondaryDamage, secondaryType end A tag que deve add ao creaturescript.xml esta como comentário no script, é só adicionar. Depois para funcionar no Gaz, vá até o xml dele em monster e coloque em seu código: <script> <event name="HealGaz" /> </script> TELEPORT - Quem passa em cima do corpo dos summons do boss é teleportado para perto dele. Crie um arquivo em movements/scripts/ com o nome tp_gaz.lua e coloque esse código: -- <movevent event="StepIn" itemid="22455" script="teleport_gaz.lua"/> function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if player == nil then return false end local monster = Creature("Gaz'Haragoth") if monster then player:teleportTo(monster:getPosition()) else player:teleportTo(fromPosition) end return true end A tag que deve add ao movements.xml esta como comentário no script, é só adicionar.
  6. Primeiro vá em / data / actions/ scripts cria um arquivo.lua function onUse(cid, item, frompos, item2, topos) exhaust,lifemax,porce = 1100,math.max((getPlayerLevel(cid)*10)),9 -- 9% if getPlayerStorageValue(cid, 14725) >= os.time() then return true end if getPlayerLevel(cid) > (lifemax/10-1) then doCreatureAddHealth(item2.uid, math.random(math.floor(getCreatureMaxHealth(cid)/100*porce/1.4),math.ceil(getCreatureMaxHealth(cid)/100*porce))) doSendMagicEffect(topos, CONST_ME_MAGIC_BLUE) doCreatureSay(item2.uid, "Aaaah...", TALKTYPE_ORANGE_1) setPlayerStorageValue(cid, 14725, os.time() + exhaust / 1000) return true end end actions.xml <action itemid="iddoitem" script="arquivo.lua"/> para alterar quantos porcentos quer que heala altera aqui o red exhaust,lifemax,porce = 1100,math.max((getPlayerLevel(cid)*10)),9 -- 9%
  7. Pessoal preciso de um jeito de aparecer na tela em cima o nome do local que o player esta entrando por exemplo se entrar no templo de saffron aparecer "Templo de saffron" na tela
  8. Azeroth Server Updated 12/03/2012: v1.1 Outras Versões: v1.0 [8.70]: http://www.xtibia.com/forum/topic/150269-azeroth-server-updated/ v2.0 [9.60]: http://www.xtibia.com/forum/topic/205054-960-azeroth-rpg/ Versão: 8.60 Distro: TFS 0.4 Mapa Base: Yourots Edited e Mix Yourots Features: > 7 Cidades: Azeroth Avalon Zatur Liberty Bay Gloria Sand Trap Tiquanda > Mapa RPG bem detalhado para Ots Low e Mid rate. > Inúmeras invasões automáticas, Low e High lvl (ou iniciadas pelo comando /raid "nome"). > NPCs de Travel/Boat diferentes para cada cidade. > Mais de 70 quests (além das principais) espalhadas pelo mapa. > Quests especiais com NPCs > Arena PvP sem perda de items. > Sistema de Guerras pelo Castelo [entre guilds] (mais detalhes abaixo) > Sistema de Refinamento e Slot (mais detalhes abaixo). > Sistema de Mineração (mais detalhes abaixo) > Scripts e sistemas aprimorados para o servidor > Distro SEM erro algum > Principais Quests: Annihilator Blue Legs Pits of Inferno MMS The Inquisition The Death FireWalker Boots Demon Helmet Draken Hell Conquer > 23 Raids Automáticas e configuradas: > Sistema de Guerras pelo Castelo [Honor Castle, a oeste de Azeroth] Evento automático. Quando a guerra é anunciada as guilds podem batalhar pelo controle do castelo, dando use no monumento do último andar e permanecendo assim até a guerra acabar. O último jogador a ter o controle do castelo antes do tempo acabar será o vencedor, e sua guild se tornará dona do castelo. Todos os membros da Guild ganharão uma recompensa e poderão acessar o mapa do subsolo. Os membros de outras Guilds serão teleportados para o templo e não poderão acessar o castelo. O sistema envia mensagens a todos antes de o evento começar, quando começar, quando o dono do castelo muda, antes de se finalizar e ao finalizar, relatando o conquistador do castelo e a guild vencedora. Imagens: Raids Honor Castle War Upgrade & Slot System > Histórico: V 0.2 V 0.3 V 0.4 V 1.0 V 1.1 Edição e postagem(leia): Eu autorizo edições e repostagens do Azeroth Server (aliás, não posso proibir isso) mas peço a vocês que pelo menos respeitem o estilo do mapa. Eu não sei se poderei dar continuidade a ele, mas trata-se de um projeto RPG. Pensa só, eu tive um trabalhão pra editar o server, fiz tudo com mais amor do que o arroz que sua mãe faz com sazón, e você vai baixar, encher de teleportes e hunts quadradas, colocar armas com atk de 350000, sistemas VIPs sem propósito algum, vai copiar o tópico, retirar meus créditos e postar novamente? Reconsidere, pois não há nada mais desmotivador para um desenvolvedor do que isso, ver seu trabalho cair em desuso, como aconteceu com o Styller YourOts, Vancini e Baiak, que agora é um monstro sem pé nem cabeça (alguns gostam desse tipo de server, tudo bem, mas essa não é a proposta deste servidor). Se teve boas ideias e quer editar o servidor para postar, fique à vontade, estarei à disposição quando puder, mas não me decepcione, ok? lindos Não há teleports diretos para hunts ou quests. Não há items ou monstros editados(além dos trainers). Não há sistema VIP, VIP 2, VIP 3, VIP 345456364. Não há raids com monstros excessivamente fortes nas cidades iniciais. Créditos: < Unknow YourOts Edited >< Mix Yourots Team >< Crystal Server Team >< Tryller >< Mock >< TFS Team >< TonyHanks >< Centera World >< Vmspk > (Nunca retire os créditos, nem mesmo se for postar o servidor em outro fórum) DOWNLOADS > Opcionais IP Changer - Utilitários(opcional) - Map Editor *Utilitários inclui: Lista com códigos de todos os looktypes, SQLite Studio 1.1.1, códigos das cores dos outfits e o OTRestarter. > Servidor Tive problemas para encontrar um distro confiável. Vários TFS não funcionavam direito ou pareciam estar infectados, segundo o VirusTotal, mas ao que me parece o site deve ter mudado algo em suas configurações, por que até arquivos limpos como o antigo Mix YourOts, postado aqui mesmo, agora ficam com 16 + arquivos suspeitos no novo scan. Eu optei por usar um TFS 0.4 postado na Vapus pelo usuário Lyonman (LINK). O distro foi testado com vários anti-virús, sem nenhum problema, e funciona perfeitamente com o Azeroth Server, porém, sou responsável apenas pelo DataPack do servidor. Se você decidir usar este distro, será por sua própria conta (ou se alguém tiver alguma versão do tfs 0.4 r3884 que passe lisa nos scans, poderei substituir). DOWNLOADS: Opção 1                                             Opção 2                                         Somente DataPack (+ IpChanger e SqliteStudio)            Servidor Completo (DataPack + Distro e DLLs) Acc do GOD: vmspk/222222 Comandos: !war para executar a guerra pelo castelo manualmente, !reset para interromper o funcionamento da war e !castle para limpar todos os dados, ou seja, o castelo volta a ser terra de ninguém. !info para saber mais sobre as novidades do Azeroth Server. Editável na pasta do Ot, em Notícias. Comando !bless e !rank disponíveis. Para saber os IDs das pedras e outras coisas vá ao Histórico, na versão 1.0. Se acha que ter um OtServ é só baixar, abrir e largar lá, ou ainda editar chars e equipamentos para você mesmo jogar e fazer o que quiser, garanto-lhe que não vai durar 2 dias. Conheça o mapa, crie eventos, interaja com os jogadores, faça torneios Pvp, marque datas para a Honor Castle, faça updates no mapa, crie monstros, hunts e quests, dê suporte e, o mais importante, mantenha o HELP aberto, sempre. Contato: vmspk@hotmail.com Conheça também o 4Fun Server 9.1 Este servidor está liberado para postagem, mas por enquanto só existe aqui no Xtibia Um bjo pra vcs
  9. BananaFight

    Mostrando suas Hunts

    Bom, como acho que todos ja viram o map do servidor de poketibia (Pxg) ele mostra icones, nomes etc no minimap, e hoje vim trazer isso para vocês Nome: Map IconDescrição: Adiciona um icone no minimapAutor: Eduardo Vicente (Banana Fight)Website: www.xtibia.com Versão 1.0 Features: Criar Icones no minimap Instalação dentro de modules/game_minimap/minimap.lua embaixo de : function toggle()if minimapButton:isOn() thenminimapWindow:close()minimapButton:setOn(false)elseminimapWindow:open()minimapButton:setOn(true)endend Você adiciona a função : function setMonsterCave(posx, posy, posz, icon, description)local pos = {}pos.x = posxpos.y = posypos.z = poszminimapWidget:addFlag(pos, icon, description)endfunction removeMonsterCave(posx, posy, posz, icon, description)local pos = {}pos.x = posxpos.y = posypos.z = poszminimapWidget:removeFlag(pos, icon, description)end Como usar setMonsterCave(Posição X do map, Posição Y do map,Posição Z do map, "Nome da Imagem", "Descrição que vai aparecer") Obs: como eu usei uma função que já existe você vai te que seguir um padrão na hora de adicionar o nome da sua imagem. Exemplo: O nome da minha imagem é "dragonicon.png", para que eu possa usar ela no script eu tenho que adicionar essa imagem dentro da pasta "data/images/game/minimap/", e vou ter que renomear essa imagem para "flagdragonicon.png", Ai depois de ter feito isso dentro do meu script quando eu for fazer o script adicionar essa imagem eu vou fazer da seguinte maneira : setMonsterCave(32238, 32240, 7, "dragonicon", "Dragon Cave") Se você ainda não entendeu é da seguinte forma, você tem uma imagem com nome "test.png", você vai adiciona a imagem no lugar certo, com o nome "flagtest.png", ai dentro do script você só usa "test", pois o script já sabe que vai ter que juntar flag+nome da imagem que você adicionou+.png. Obs 2: Sua imagem tem que ter o fundo transparente Obs 3: quando mais transparente for a imagem, mais do map aparece e causa o efeito igual ao do PXG, do map se abrindo. Exemplo de uso : arquivo : minimap.lua function init()minimapButton = modules.client_topmenu.addRightGameToggleButton('minimapButton', tr('Minimap') .. ' (Ctrl+M)', '/images/topbuttons/minimap', toggle)minimapButton:setOn(true)minimapWindow = g_ui.loadUI('minimap', modules.game_interface.getRightPanel())minimapWindow:setContentMinimumHeight(64)minimapWidget = minimapWindow:recursiveGetChildById('minimap')local gameRootPanel = modules.game_interface.getRootPanel()g_keyboard.bindKeyPress('Alt+Left', function() minimapWidget:move(1,0) end, gameRootPanel)g_keyboard.bindKeyPress('Alt+Right', function() minimapWidget:move(-1,0) end, gameRootPanel)g_keyboard.bindKeyPress('Alt+Up', function() minimapWidget:move(0,1) end, gameRootPanel)g_keyboard.bindKeyPress('Alt+Down', function() minimapWidget:move(0,-1) end, gameRootPanel)g_keyboard.bindKeyDown('Ctrl+M', toggle)g_keyboard.bindKeyDown('Ctrl+Shift+M', toggleFullMap)minimapWindow:setup()connect(g_game, {onGameStart = online,onGameEnd = offline,})connect(LocalPlayer, {onPositionChange = updateCameraPosition})if g_game.isOnline() thenonline()setMonsterCave(32239, 32240, 7, "dragon", "hihi")removeMonsterCave(32239, 32240, 7, "dragon", "hihi")endend
  10. Boa Tarde, estou tentando adaptar o snowball event para meu servidor, ja corrigi varios bugs, porém esse erro que não estou conseguindo resolver, pois não acho nenhuma documentação sobre sempre que uso o comando !snowball Atirar aparece esse erro na distro, mas a animação segue fluida no servidor, alguém sabe como resolver esse erro? sobre a line animation
  11. bom o problema é o seguinte, eu peguei um autoloot no forum e ele funciona 100% mas ele não agrupa os items coletados. gostaria de uma ajuda nesse problema! quem poder ajudar já agradeço! ❤️ este é o script responsavel pela coleta! AutoLoot = { Min_Level = 10, -- [[ Level minimo para usar o autoloot ]] -- Max_Slots = 10, -- [[ Slots maximos disponiveis ]] -- Boost_Actived = true, --- [[ Storages ]] -- Storage_Boost = 45000, Storage_On_Items = 45001, Storage_On_Gold = 45002, Storages = { Count_Gold = 45003, Count_Items = 45004, Count_Table = 45005, Slots = {45006, 45007, 45008, 45009, 45010, 45011, 45012, 45013, 45014, 45015} -- [[ Storage pra cada slot ]] -- } } AutoLoot_Boost = { -- [[ Loot boost vende os loots coletados automaticamente ]] -- -- [[ID do item] = Valor.]] -- [11441] = 1000, [11442] = 1000, [11443] = 1000, [11444] = 1000, [11445] = 1000, [11446] = 1000, [11447] = 1000, [11448] = 1000, [11449] = 1000, [11450] = 1000, [11451] = 1000, [11452] = 1000, [11453] = 1000, [11454] = 1000 } function AutoLoot.CountTable(table) local Count = 0 if type(table) == "table" then for index in pairs(table) do Count = Count + 1 end return Count end return false end function AutoLoot.getContainerItemsInfo(ContainerUID) local Table = {} if ContainerUID and ContainerUID > 0 then local Index = 0 for i = 0, getContainerSize(ContainerUID) - 1 do local item = getContainerItem(ContainerUID, i) Index = Index + 1 Table[Index] = {UID = item.uid, ItemID = item.itemid, Count = item.type} end return Table end return false end function AutoLoot.String(String) local Table = {} local x, old, last = 0, 0, 0 local first, second, final = 0, 0, 0 if type(String) ~= "string" then return Table end for i = 2, #String - 1 do if string.byte(String:sub(i,i)) == string.byte(':') then x, second, last = x + 1, i - 1, i + 2 for t = last, #String - 1 do if string.byte(String:sub(t,t)) == string.byte(',') then first = x == 1 and 2 or old old, final = t + 2, t - 1 local Index = String:sub(first, second) local Var = String:sub(last, final) Table[tonumber(Index) or tostring(Index)] = tonumber(Var) or tostring(Var) break end end end end return Table end function AutoLoot.TranslateString(Table) local String = "" if type(Table) ~= "table" then return String end for i, last in pairs(Table) do String = String..i..": ".. last ..", " end String = "a"..String.."a" return tostring(String) end function AutoLoot.getPlayerStorageZero(cid, key) return getPlayerStorageValue(cid, key) > 0 and getPlayerStorageValue(cid, key) or 0 end function AutoLoot.getStorageZero(key) return getGlobalStorageValue(key) > 0 and getGlobalStorageValue(key) or 0 end function AutoLoot.setPlayerTableStorage(cid, key, value) return doPlayerSetStorageValue(cid, key, AutoLoot.TranslateString(value)) end function AutoLoot.setGlobalTableStorage(key, value) return setGlobalStorageValue(key, AutoLoot.TranslateString(value)) end function AutoLoot.getPlayerTableStorage(cid, key) return AutoLoot.String(getPlayerStorageValue(cid, key)) end function AutoLoot.getGlobalTableStorage(key) return AutoLoot.String(getGlobalStorageValue(key)) end function AutoLoot.getPlayerList(cid) local Table = {} for i = 1, #AutoLoot.Storages.Slots do if getPlayerStorageValue(cid, AutoLoot.Storages.Slots[i]) ~= -1 then table.insert(Table, getPlayerStorageValue(cid, AutoLoot.Storages.Slots[i])) end end return Table end function AutoLoot.ExistItemByName(name) local Items = io.open("data/items/items.xml", "r"):read("*all") local GetITEM = Items:match('name="' .. name ..'"') if GetITEM == nil or GetITEM == "" then return false end return true end function AutoLoot.addToList(cid, name) local ItemID = getItemIdByName(name) if AutoLoot.getPlayerList(cid) and isInArray(AutoLoot.getPlayerList(cid), ItemID) then return false end for i = 1, #AutoLoot.Storages.Slots do if getPlayerStorageValue(cid, AutoLoot.Storages.Slots[i]) == -1 then doPlayerSetStorageValue(cid, AutoLoot.Storages.Slots[i], ItemID) return true end end end function AutoLoot.removeFromList(cid, name) local ItemID = getItemIdByName(name) for i = 1, #AutoLoot.Storages.Slots do if getPlayerStorageValue(cid, AutoLoot.Storages.Slots[i]) == ItemID then doPlayerSetStorageValue(cid, AutoLoot.Storages.Slots[i], -1) return true end end return false end function AutoLoot.Boost(cid) return tonumber(getPlayerStorageValue(cid, AutoLoot.Storage_Boost)) >= os.time() end function AutoLoot.Items(cid, position) if not isPlayer(cid) then return true end local Check, String, Position = false, "", {} for i = 1, 255 do position.stackpos = i if getThingFromPos(position).uid and getThingFromPos(position).uid > 0 and isContainer(getThingFromPos(position).uid) then Position = position Check = true break end end if Check then local CorpseUID = AutoLoot.getContainerItemsInfo(getThingFromPos(Position).uid) if CorpseUID then for Index, Item in pairs(CorpseUID) do if Index < AutoLoot.CountTable(CorpseUID) then if Item.UID and Item.ItemID then if isContainer(Item.UID) then local Bag = AutoLoot.getContainerItemsInfo(Item.UID) for i = 1, AutoLoot.CountTable(Bag) do if isInArray(AutoLoot.getPlayerList(cid), Bag[i].ItemID) then if Bag[i].Count > 1 then doRemoveItem(Bag[i].uid, Bag[i].Count) doPlayerAddItem(cid, Bag[i].ItemID, Bag[i].Count) String = String.." ".. Bag[i].Count .." ".. getItemNameById(Bag[i].ItemID) .." +" else doRemoveItem(Bag[i].uid) if AutoLoot.Boost_Actived and AutoLoot.Boost(cid) then if AutoLoot_Boost[Bag[i].ItemID] then doPlayerSetBalance(cid, getPlayerBalance(cid) + AutoLoot_Boost[Bag[i].ItemID]) String = String.."1 ".. getItemNameById(Bag[i].ItemID) .." (".. AutoLoot_Boost[Bag[i].ItemID] .." dinheiro no banco)" else doPlayerAddItem(cid, Bag[i].ItemID, 1) String = String.."1 ".. getItemNameById(Bag[i].ItemID) .."" end else doPlayerAddItem(cid, Bag[i].ItemID, 1) String = String.."1 ".. getItemNameById(Bag[i].ItemID) .."" end end end end end end end if isInArray(AutoLoot.getPlayerList(cid), Item.ItemID) then if Item.Count > 1 then doRemoveItem(Item.UID, Item.Count) doPlayerAddItem(cid, Item.ItemID, Item.Count) String = String.." ".. Item.Count .." ".. getItemNameById(Item.ItemID) .." +" else doRemoveItem(Item.UID) if AutoLoot.Boost_Actived and AutoLoot.Boost(cid) then if AutoLoot_Boost[Item.ItemID] then doPlayerSetBalance(cid,getPlayerBalance(cid) + AutoLoot_Boost[Item.ItemID]) String = String.."1 "..getItemNameById(Item.ItemID).." ("..AutoLoot_Boost[Item.ItemID].." dinheiro no banco)" else doPlayerAddItem(cid, Item.ItemID, 1) String = String.."1 "..getItemNameById(Item.ItemID).."" end else doPlayerAddItem(cid, Item.ItemID, 1) String = String.."1 "..getItemNameById(Item.ItemID).."" end end end end end end AutoLoot.setPlayerTableStorage(cid, AutoLoot.Storages.Count_Table, {[1] = String, [2] = 0}) end function AutoLoot.Gold(cid, position) if not isPlayer(cid) then return true end local Check = false local Total_Gold = 0 local Position = {} for i = 1, 255 do position.stackpos = i if getThingFromPos(position).uid and getThingFromPos(position).uid > 0 and isContainer(getThingFromPos(position).uid) then Position = position Check = true break end end if Check then local CorpseUID = AutoLoot.getContainerItemsInfo(getThingFromPos(Position).uid) if CorpseUID then for Index, Item in pairs(CorpseUID) do if Item.UID and Item.ItemID then if Index < AutoLoot.CountTable(CorpseUID) then if isContainer(Item.UID) then local Bag = AutoLoot.getContainerItemsInfo(Item.UID) for i = 1, AutoLoot.CountTable(Bag) do if isInArray({2148, 2152, 2160}, Bag[i].ItemID) then local Multiplier = 1 if Bag[i].ItemID == 2148 then Multiplier = 1 elseif Bag[i].ItemID == 2152 then Multiplier = 100 elseif Bag[i].ItemID == 2160 then Multiplier = 1000 end doRemoveItem(Bag[i].uid, Bag[i].Count) doPlayerSetBalance(cid, getPlayerBalance(cid) + tonumber(Bag[i].Count) * Multiplier) Total_Gold = Total_Gold + Bag[i].Count * Multiplier doPlayerSetStorageValue(cid, AutoLoot.Storages.Count_Gold, tonumber(AutoLoot.getPlayerStorageZero(cid, AutoLoot.Storages.Count_Gold)) + tonumber(Item.Count) * tonumber(Multiplier)) end end end end if isInArray({2148, 2152, 2160}, Item.ItemID) then local Multiplier = 1 if Item.ItemID == 2148 then Multiplier = 1 elseif Item.ItemID == 2152 then Multiplier = 100 elseif Item.ItemID == 2160 then Multiplier = 1000 end doRemoveItem(Item.UID, Item.Count) doPlayerSetBalance(cid, getPlayerBalance(cid) + Item.Count * Multiplier) doPlayerSetStorageValue(cid, AutoLoot.Storages.Count_Gold, tonumber(AutoLoot.getPlayerStorageZero(cid, AutoLoot.Storages.Count_Gold)) + tonumber(Item.Count) * tonumber(Multiplier)) Total_Gold = Total_Gold + Item.Count * Multiplier end end end end end if Total_Gold > 0 then Total_Gold = Total_Gold - (Total_Gold * 0.2) Total_Gold = math.ceil(Total_Gold) doPlayerSetBalance(cid, getPlayerBalance(cid) + Total_Gold) local Table = AutoLoot.getPlayerTableStorage(cid, AutoLoot.Storages.Count_Table) Table[2] = Total_Gold AutoLoot.setPlayerTableStorage(cid, AutoLoot.Storages.Count_Table, Table) end end function AutoLoot.Message(cid) if not isPlayer(cid) then return true end local Table = AutoLoot.getPlayerTableStorage(cid, AutoLoot.Storages.Count_Table) if AutoLoot.CountTable(Table) >= 1 then if Table[1] then if Table[2] and Table[2] > 0 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "[Auto Loot] Coletados: ".. Table[1] .." ".. Table[2] .." gold coins.") else if type(Table[1]) == "string" and string.len(Table[1]) > 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "[Auto Loot] Coletados: "..Table[1]) end end elseif not Table[1] then if Table[2] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "[Auto Loot] Coletados: "..Table[2].." gold coins.") end end end doPlayerSetStorageValue(cid, AutoLoot.Storages.Count_Table, -1) end
  12. Evolera v3 - SPECIAL EDITION 12.11 Equilíbrio De Profissões Nossa principal tarefa era equilibrar profissão, foi feito todos os esforços para fazer com que pareça profissional. Nesta edição ninguém reclamou dos ataques fracos de qualquer profissão. Bob Marley - Event Nosso convidado especial apareceu, NPC que nos dá missões incríveis. Eu acho que ele capturou um determinado grupo social para ots! Governor - Quest Quest Hardcore Oficialmente achamos ser a mais difícil missão no ot. Pode-se obter itens que não está no shoopie sms. Itens de hardcore aos equipamentos para cada profissão. Sacred Dragon Tales - Event Assim, as 10 missões de um dragão misterioso, cada missão é única. Dragão misterioso tem para você uma série de valiosos prêmios na forma de experience e itens. New Quest Room: Sala de quest totalmente reconstruída, agora parece muito mais agradável e linda! Reconstruiu a cidade/templo: A nova cidade é jescze mais misteriosa, esconde um monte de missões secretas, missões e locais para os quais podemos obter apenas alguns. O templo atualizou, agora com mais espaço, temos acrescentado novos teleports e npceki Novos monstros! Ghastly dragons Medusa Drakeny Helish Tortoisy Halloween Pumpkiny Rainbow Margarothy Sacred Dragon Child Sacred Mastery Novos NPC's! Bob Marley Governor Gladia Tommy Rastaman Uncle Fester Bob Marley Mother Novos Items! Armor-Noob Helmet-Noob Dark monk armor Guardian boots Dragon scale boots Lucky Charm Crystal-Tp Hardcore Set Hardcore Weapons E todos items Zaoan Novos Scripts! Agora, o seu progresso que você será capaz de verificar o log de quest Ou Lotto [sistema de bilhete! Ticket] Melhoria Tetris e Snake Boomberman Trem-atacante Monki Faster [você não pode matá-los] Segredos do sistema ou quests escondidas, missões, npceki lugar secreto Addons em nosso ots está ficando em 2 maneiras através de Missões Addon e Dolla Outfiter [alavanca dando addons no templo] agora muda roupas por 30min. Muito mais ataques e eventos Bounty Hunters [ou hunted system] Novos Systemas! War System Outfit system Afk system Extensive reporting system players New channels like "Yahoo" Castle System Vote System Boomberman system Tetris system Casino System Soccer System Snake system Addon Bonuses Lottery System Comandos para players! / Balance - controle de balanço ! Online - quem está online - Online ! Uptime - mostra quantas horas servidor Stoji ! Deathlist - lista de mortes ! Pvp - verifica se o servidor está pvp ou non-pvp ! serverinfo - informações do servidor / Commands - uma lista de comandos ! Soft - correção softy ! Firewalker - reparos FWB ! Backpack - mochila compra ! Aol - comprar Amulet of Loss ! Bless - abençoar compra 100% ! Premium - prêmio de compra ! spells - lista de spells ! Changesex - mudança de sexo ! Frags - mostra o número de frags ! it - guilda roupas mudança ! After - mudança de roupas festa ! Buyhouse - compra uma casa ! Sellhouse - vende uma casa ! Leavehouse - sair de casa ! Createguild - criar guildas ! Joinguild - Junte-se a guilda ! Afk on /! Afk off - afk sistema ! so - comando para votar ! Did not - comando para votar ! Bomb - bomba que você colocou no boomberman ! Ticket - Lotto sistema / War - todos os comandos para os goods Novos Eventos! Metin Stones Castle War Sacred Dragon Nesta edição, foi corrigido todos os erros de novos hosters [houses e problemas no map] Todos os créditos vão para Alex. Screens - Download - Via MediaFire Download - Via 4Shared
  13. meu deus.... as pessoas ficam cansandu seus chars, fazendu eles subir e descer escadas... nós temos em 2006, :suspiro vamus dexar nossos chars discansarem um poco de subir e descer escadas. eu como libero todas as actions ke eu faço com mt gosto, vo liberar mais uma Elevator System by Colex esta action tem 2 scripts (1 é u "painel" para escolher u andar e u otro é para depois de escolher um andar ir para u andar escolhidu) :pinch: vamos começar com os códigus e dps pra ensinar melhor vcs vaum encontrar uma screenshot explicando. Primeiro, va na pasta data>actions>scripts e crie um ficheiro chamado elevator.lua ondi vc vai escrever o seguinte code: ------elevator system (part 1 of 2) by colex------function onUse(cid, item, frompos, item2, topos)if (getPlayerStorageValue(cid,5080)) == -1 thendoPlayerSendTextMessage(cid,22,"1st floor")setPlayerStorageValue(cid,5080,1)elseif (getPlayerStorageValue(cid,5080)) == 1 thendoPlayerSendTextMessage(cid,22,"2nd floor")setPlayerStorageValue(cid,5080,2)elseif (getPlayerStorageValue(cid,5080)) == 2 thendoPlayerSendTextMessage(cid,22,"3rd floor")setPlayerStorageValue(cid,5080,-1)endreturn 1end agora, vamus fazer a 2º parte do script, faça na mesma pasta do code de cima, um ficheiro chamado elevator2.lua e escreva o seguinte code: ------elevator system (part 2 of 2) by Colex--------function onUse(cid, item, frompos, item2, topos)andar1 = {x=512, y=509, z=7}andar2 = {x=512, y=509, z=6}andar3 = {x=512, y=509, z=5}player1pos = getPlayerPosition(cid)player1 = getThingfromPos(player1pos)if player1.itemid == cid and (getPlayerStorageValue(cid,5080)) == 1 thendoTeleportThing(player1.uid,andar1)elseif player1.itemid == cid and (getPlayerStorageValue(cid,5080)) == 2 thendoTeleportThing(player1.uid,andar2)elseif player1.itemid == cid and (getPlayerStorageValue(cid,5080)) == -1 thendoTeleportThing(player1.uid,andar3)endreturn 1end aki vc deve trocar as coordenadas do andar1, andar2 e andar3. --------------------------------------- ultima parte é adicionar no ficheiro actions.xml ke esta na pasta data>actions as seguintes linhas: --------elevator---------<action uniqueid="1945" script="elevator2.lua" /><action uniqueid="1946" script="elevator2.lua" /><action uniqueid="1947" script="elevator2.lua" /><action uniqueid="1948" script="elevator.lua" /><action uniqueid="1949" script="elevator.lua" /><action uniqueid="1950" script="elevator.lua" />--------/elevator--------- explicando 1945 | 1946 | 1947 - estes são os uniqueids dos "paineis" ke servem para escolher u andar pra ondi vai (deve ter um em cada andar) 1948 | 1949 | 1950 - estes são os uniques id da "alavanca" (pode ser otro item) ke vc usa dps de escolher u andar nu painel, (vc va pro andar escolhidu nu painel) agora para explicar melhor postei uma SS: quadrado vermelho - istu daki é u "painel" ke será usado para escolher u andar (vc podi usar otro item) quadrado azul - essa alavanca é ondi vc da use dps de escolher u andar nu "painel" (tbm pode ser usado otro item) ------------------------ é isso ai!! espero ke gostem e ke comentem u ke axam| mesmu kem naum vai usar é bom comentar pq eu gasto meu tempo nissu e libero pra ajudar vcs
  14. Ola galerinha do xtibiana. Vocês lembram do shopping system beta? Bem o shopping system beta foi um sistema criado por min a um tempinho. O link da versão beta é: http://www.xtibia.co...demo-by-caotic/ Os players podiam vender e comprar itens de forma rápida e pratica só que na versão demo ele tinha limitações então resolvi fazer a versão 1.0 com mais funções. Ele funciona da seguinte maneira: O player vende seu item no shopping depois outro player resolve ver o shopping e acaba comprando o item. Quando o player vendedor estiver online ele recebera a mensagem dizendo que o seu item foi vendido e ele recebera o money da compra. Na versão 1.0 do shopping system foi adicionado: Vamos a instalação. Primeiro execute estes comandos na sua database: CREATE TABLE "shop" ( "item" INT NOT NULL, "price" INT NOT NULL, "players" INT NOT NULL ); ALTER TABLE `players` ADD `shop` INT(15) NOT NULL DEFAULT 0 Agora va em lib e crie um arquivo lua chamado shop e coloque isto: function doPlayerAddItemInShop(cid, itemid, price) db.executeQuery("INSERT INTO `shop` VALUES (".. itemid ..", ".. price ..", ".. getPlayerGUID(cid) ..")") return true end function getItemPriceInShop(itemid) local shop = db.getResult("SELECT * FROM `shop` WHERE `item` = ".. itemid ..";") return shop:getDataInt("price") end function getItemPlayerInShop(itemid) local shop = db.getResult("SELECT * FROM `shop` WHERE `item` = ".. itemid ..";") return shop:getDataInt("players") end function getExistItemInShop(itemid) local shop = db.getResult("SELECT * FROM `shop` WHERE `item` = ".. itemid ..";") if shop:getID() ~= -1 then return true end return nil end function getExistItemPlayerInShop(player, itemid) local shop = db.getResult("SELECT * FROM `shop` WHERE `players` = ".. player .." and `item` = ".. itemid ..";") if shop:getID() ~= -1 then return true end return nil end function doPlayerBuyItemInShop(cid, itemid, player) doPlayerAddItem(cid, itemid) doPlayerRemoveMoney(cid, getItemPriceInShop(itemid)) db.executeQuery("UPDATE `players` SET `shop` = "..getItemPriceInShop(itemid).." WHERE `id` = "..getItemPlayerInShop(itemid)) db.executeQuery("DELETE FROM `shop` WHERE `players` = ".. player .." and `item` = ".. itemid ..";") end function getMoneyGainInShop(cid) local money = db.getResult("SELECT `shop` FROM `players` WHERE `id` = "..getPlayerGUID(cid)) return money:getDataInt("shop") end function setMoneyGainInShop(cid, money) db.executeQuery("UPDATE `players` SET `shop` = "..money.." WHERE `id` = "..getPlayerGUID(cid)) end function doShowListShop(cid) local item = db.getResult("SELECT * FROM `shop` WHERE `item` ORDER BY `price`") str = "Itens a venda no shopping:\n\n" if item:getID() == -1 then doShowTextDialog(cid, 1387, "Não ha itens disponiveis no shopping\n Não existe itens no shopping!") return true end while true do local list = item:getDataInt("item") local players = item:getDataInt("players") local price = item:getDataInt("price") local shops = "Itens em Shopping" local list = string.upper(getItemNameById(list)) local players = getPlayerNameByGUID(players) str = str .. list .. " -("..players..")- Preço ("..price..")]\n\n" if not item:next() then doShowTextDialog(cid, 1397, str) break end end end Agora vá em talkactions/script e crie um arquivo lua chamado list e coloque este codigo: function onSay(cid, words, param, channel) doShowListShop(cid) return true end Agora vá em talkactions denovo crie um arquivo lua chamado de shop e coloque isto: function onSay(cid, words, param, channel) if param == " " or param == "" or not param then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o id do item") end local t = string.explode(param, ",") if not t[1] then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o id do item") end if not t[2] then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o preço do item") end if(isNumeric(t[1])) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o nome do item") end if not (isNumeric(t[2])) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque O PREÇO DO ITEM") end if not getItemIdByName(t[1], false) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este item "..t[1].." não existe") end local item = getItemIdByName(t[1]) local price = t[2] if getPlayerItemCount(cid, item) < 1 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem "..t[1].."") end if getExistItemPlayerInShop(getPlayerGUID(cid), item) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já pos este item no shop") end doPlayerRemoveItem(cid, item, 1) doPlayerAddItemInShop(cid, item, price) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você colocou no shopping o seu item "..t[1].."") return true end Agora continue em talkactions e crie um arquivo lua chamado de comprar e coloque isto: function onSay(cid, words, param, channel) if param == " " or param == "" or not param or isNumeric(param) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o nome do item dizendo /compra(nome do item,nome do player)") end local t = string.explode(param, ",") if not getItemIdByName(t[1], false) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este item "..t[1].." não existe") end local itemid = getItemIdByName(t[1]) local player = getPlayerGUIDByName(t[2]) if not getExistItemInShop(itemid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este item não existe no shopping") end if t[2] == " " or t[2] == "" or isNumeric(t[2]) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o nome do vendendor dizendo /compra(nome do item,nome do player)") end if not doPlayerRemoveMoney(cid, getItemPriceInShop(itemid)) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem "..getItemPriceInShop(itemid).." para comprar "..t[1].." do shopping") end if not player then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não existe nenhum item com o nome deste player.") end doPlayerBuyItemInShop(cid, itemid, player) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Parabens você comprou "..t[1].."") return true end Agora coloque estas tags em talkactions.xml: Agora vá em creaturescripts/scripts e crie um arquivo lua chamado de shop: function onThink(cid, interval) if getMoneyGainInShop(cid) > 0 then doPlayerAddMoney(cid, getMoneyGainInShop(cid)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Seu itens foi vendidos você recebeu "..getMoneyGainInShop(cid).." money") setMoneyGainInShop(cid, 0) return true end return true end Registre o evento colocando em login.lua de creaturescripts e coloque isto antes do ultimo return: registerCreatureEvent(cid, "shop") Agora vá em creaturescrips.xml e coloque esta tag: E prontinho sistema instalado Comandos
  15. Olá, preciso de ajuda para criar um monstro. Ele seria um monstro que dropa gold no chão toda vez que toma um hit ao invés de sangrar. 99% de dropar 0-10 gold coin 01% de dropar 0-5 platinum coin Por exemplo um goblin, toda vez que ele apanhar, vai "sangrar" gold no chão e além disso ele droparia outros loots se morrer. Muito obrigado ------------------------ English ------------------------------------- Hello, I need help creating a monster. He would be a monster that drops gold on the ground every time he takes a hit instead of bleeding. 99% chance to drop 0-10 gold coin 01% chance to drop 0-5 platinum coin For example a goblin, every time he gets hit, he will "bleed" gold on the ground and in addition he would drop other loots if he dies. Thanks.
  16. Ola galerinha xtibiana. Eu resolvi fazer uma versão superior do report system usando db. Segue o link da versão demo: http://www.xtibia.com/forum/topic/198470-report-sytem-beta/ Esta versão utiliza banco de dados assim fica mais fácil de manipular e o administrador poderá ver os reports "In-Game" além de que eles serão excluídos apos serem lidos. A lista e ordenada pelo level do player "evitando as vezes você ler primeiros possíveis floods". Vamos a instalação. Vá em lib e crie um arquivo lua chamado de report e coloque isto: function getReportByGuid(guid) local shop = db.getResult("SELECT * FROM `report` WHERE `id` = ".. guid ..";") return shop:getDataString("report") end function doPlayerAddReport(cid, report) db.executeQuery("INSERT INTO `report` (`id`, `report`, `level`) VALUES (" .. getPlayerGUID(cid) .. ", '" .. report .. "', " .. getPlayerLevel(cid) .. ");") return true end function showReports(cid) local rep = db.getResult("SELECT * FROM `report` WHERE `id` ORDER BY `level`") str = "Reports Ativos:\n\n" if rep:getID() == -1 then doShowTextDialog(cid, 1387, "Não ha reports disponiveis!") return true end while true do local list = rep:getDataString("report") local players = rep:getDataInt("id") local name = getPlayerNameByGUID(players) str = str .. list .. " -("..players..")- Name ("..name..")]\n\n" db.executeQuery("DELETE FROM `report` WHERE `id` = ".. players.." and `report` = '".. list .."';") if not rep:next() then doShowTextDialog(cid, 1397, str) break end end end Agora vá em talkactions e crie um arquivo LUA chamado de report e coloque este codigo: function onSay(cid, words, param, channel) local time = 4 ---- Exhaustion cada numeral equivale a 1 hora. if param == "" or not param or param == " " then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "E necessario escrever o report") and false end if exhaustion.get(cid, 23246) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você atingiu o limite de reports espere o limite sair") and false end if #param <= 4 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O seu report deve conter mais de 4 caracteres") and false end exhaustion.set(cid, 23246, time*36000*1000) doPlayerAddReport(cid, param) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Parabéns seu report foi enviado para nosso banco de dados logo ele sera visto\nA equipe agradece") return true end Agora continue em talkactions e crie um arquivo lua chamado de logreport e coloque isto: function onSay(cid, words, param, channel) showReports(cid) return true end Agora vá em talkactions.xml e coloque esta tags: Dicas:
  17. Lottery System Explicação: Lottery System é um Sistema que Todos os Players que Estiverem Online no Seu OtServer Poderam Ganhar. O Script Sortea algum Player Online, e Sorteia o Item que o Player Ganhará é claro que ele sorteia so os items que voce escolheu no Script, ele esta arrumado para o evento acontecer em 3 a 3 horas é so arruma na tag o 10800 que no Caso é 3 Horas. Versoes Testadas: TFS> 0.3.4, 0.3.5 e 0.3.6 Forao Testadas! 8.50 :button_ok: 8.52 :button_ok: 8.54 :button_ok: 8.60 :button_ok: Script Em Mods: Vá em Data>Mods crie uma pasta.xml chamada lottery e coloque isto dentro dela: <mod name="Lottery System" version="1.4" author="vDk" contact="zlom290@gmail.com" enabled="yes"> <config name="lottery_config"><![CDATA[ config = { lottery_hour = "3 Hours", -- Time to next lottery (only for broadcast message, real time you can set on globalevents.xml) rewards_id = {2494, 2472, 2514, 2160}, -- Rewards ID crystal_counts = 10, -- Used only if on rewards_id is crystal coin (ID: 2160). website = "yes" -- Only if you have php scripts and table `lottery` in your database! } ]]></config> <globalevent name="lottery" interval="10800" event="script"><![CDATA[ domodlib('lottery_config') function onThink(interval, lastExecution) local list = {} for i, tid in ipairs(getPlayersOnline()) do list[i] = tid end local winner = list[math.random(1, #list)] local random_item = config.rewards_id[math.random(1, #config.rewards_id)] if(random_item == 2160) then doPlayerAddItem(winner, random_item, config.crystal_counts) doBroadcastMessage("[LOTTERY SYSTEM] Winner: " .. getCreatureName(winner) .. ", Reward: " .. config.crystal_counts .. " " .. getItemNameById(random_item) .. "s! Congratulations! (Next Lottery in " .. config.lottery_hour .. "") else doBroadcastMessage("[LOTTERY SYSTEM] Winner: " .. getCreatureName(winner) .. ", Reward: " .. getItemNameById(random_item) .. "! Congratulations! (Next Lottery in " .. config.lottery_hour .. "") doPlayerAddItem(winner, random_item, 1) end if(config.website == "yes") then db.executeQuery("INSERT INTO `lottery` (`name`, `item`) VALUES ('".. getCreatureName(winner) .."', '".. getItemNameById(random_item) .."');") end return true end ]]></globalevent> </mod> Feche e Salve! Script Em Arquivos.lua: Se seu OtServer nao Tiver a Pasta Mods, Voce podera colocar normalmente em pastas.lua!! Vá em Data>Globalevents.xml abra-lo e Adicione esta Tag: <globalevent name="lottery" interval="10800" event="script" value="lottery.lua"/> Agora vá em Data>GlobalEvents>Scripts crie uma pasta.lua chamada lottery e coloque isto: -- by vDk local config = { lottery_hour = "3 Hours", -- Time to next lottery (only for broadcast message, real time you can set on globalevents.xml) rewards_id = {2494, 2472, 2514, 2160}, -- Rewards ID crystal_counts = 10, -- Used only if on rewards_id is crystal coin (ID: 2160). website = "yes" -- Only if you have php scripts and table `lottery` in your database! } function onThink(interval, lastExecution) local list = {} for i, tid in ipairs(getPlayersOnline()) do list[i] = tid end local winner = list[math.random(1, #list)] local random_item = config.rewards_id[math.random(1, #config.rewards_id)] if(random_item == 2160) then doPlayerAddItem(winner, random_item, config.crystal_counts) doBroadcastMessage("[LOTTERY SYSTEM] Winner: " .. getCreatureName(winner) .. ", Reward: " .. config.crystal_counts .. " " .. getItemNameById(random_item) .. "s! Congratulations! (Next Lottery in " .. config.lottery_hour .. "") else doBroadcastMessage("[LOTTERY SYSTEM] Winner: " .. getCreatureName(winner) .. ", Reward: " .. getItemNameById(random_item) .. "! Congratulations! (Next Lottery in " .. config.lottery_hour .. "") doPlayerAddItem(winner, random_item, 1) end if(config.website == "yes") then db.executeQuery("INSERT INTO `lottery` (`name`, `item`) VALUES ('".. getCreatureName(winner) .."', '".. getItemNameById(random_item) .."');") end return true end Feche e Salve Tudo! Para Sites.php e MySql: Bom Se voce Tem um Site e Quiser adicionar este Script nele, para Anunciar no Seu site quem Ganhou a Loteria entao Siga essas Etapas. (Nao Sei mecher Muinto Nisso.) Crie uma Pasta.php e Coloque o Nome de Lottery (Lottery.Php) e adicione isto: <?PHP $lottery = $SQL->query('SELECT id, name, item FROM lottery ORDER BY id DESC LIMIT 1;'); foreach($lottery as $result) { $main_content .= '<center><h1>Lottery</h1></center> <center>Every X hours we will choose one player who will win random item!<br/> Last Winner: <a href="?subtopic=characters&name='.urlencode($result['name']).'">'.$result['name'].'</a> Item: <i>'.$result['item'].'</i> Congratulations!</center>'; } ?> Abra o Index.Php e Adicione Isto: case "lottery"; $topic = "Lottery System"; $subtopic = "lottery"; include("lottery.php"); break; e Por Ultimo na DateBase, Crie uma e Coloque: CREATE TABLE `lottery` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `item` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `lottery`(`id`, `name`, `item`) VALUES (NULL , 'Nobody', 'nothing'); Feche e Salve Tudo, e Esta Pronto. Creditos: Criador do Script = Vdk 100% Criador do Topico = DevilMoon Abraços..
  18. Eai pessoal, há alguns dias eu fiz o Buy House totalmente em lua, e hoje então resolvi postar o script: O que ele faz: Compra a house quando o player estiver olhando na porta da house. Script: local function getBoolean(x) local e = false if type(x) == "boolean" then e = x else e = getBooleanFromString(x) end return e end function onSay(cid, words, param, channel) if not isPlayer(cid) or getBoolean(getConfigValue('buyableAndSellableHouses')) == false then return true end local pos = getPlayerLookPos(cid) local tile = getTileInfo(pos) if not tile then doPlayerSendCancel(cid, "You have to be looking at door of flat you would like to purchase.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end local house = getHouseFromPos(pos) if not house then doPlayerSendCancel(cid, "You have to be looking at door of flat you would like to purchase.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end local doorPos = getThingFromPos({ x=pos.x, y=pos.y, z=pos.z, stackpos=1}).itemid if not isItemDoor(doorPos) then doPlayerSendCancel(cid, "You have to be looking at door of flat you would like to purchase.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end local houseInfo = getHouseInfo(house) local guild = houseInfo.guildHall local guid = getPlayerGUID(cid) if guild == false then if getHouseByPlayerGUID(guid) then doTeleportThing(cid,getHouseEntry(getHouseByPlayerGUID(guid))) doPlayerSendCancel(cid, "You already rent another house.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end local accountHouses = tonumber(getConfigValue('housesPerAccount')) local account = getPlayerAccountId(cid) local housesInAccountsql = db.getResult("SELECT `p`.`account_id` FROM `houses` h LEFT JOIN `players` p ON `h`.`owner` = `p`.`id` WHERE `p`.`account_id` = " .. account .. " AND `guild` = 0;") local housesInAccount = housesInAccountsql:getID() == -1 and 0 or housesInAccountsql:getRows(free) housesInAccountsql:free() if accountHouses > 0 and housesInAccount >= accountHouses then doPlayerSendCancel(cid, "You may own only " .. accountHouses .. " house\'s per account.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end if getBoolean(getConfigValue('houseNeedPremium')) == true and not isPremium(cid) then doPlayerSendCancel(cid, RETURNVALUE_YOUNEEDPREMIUMACCOUNT) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end local levelToBuyHouse = tonumber(getConfigValue('levelToBuyHouse')) if getPlayerLevel(cid) < levelToBuyHouse then doPlayerSendCancel(cid, "You have to be at least Level " .. levelToBuyHouse .. " to purchase a house.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end else if not getPlayerGuildId(cid) or getPlayerGuildLevel(cid) ~= GUILDLEVEL_LEADER then doPlayerSendCancel(cid, "You have to be at least a guild leader to purchase a hall.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end local guildHouses = getPlayerGuildId(cid) local housesInGuildsql = db.getResult("SELECT `owner` FROM `houses` WHERE `owner` = " .. guildHouses .. " AND `guild` = 1;"):getRows(free) local housesInGuild = housesInGuildsql:getID() == -1 and 0 or housesInGuildsql:getRows(free) housesInGuildsql:free() if housesInGuild ~= 0 then doPlayerSendCancel(cid, "Your guild rents already another hall.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end end if getHouseOwner(house) ~= 0 then doPlayerSendCancel(cid, "This flat is already owned by someone else.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end if getPlayerMoney(cid) < getHousePrice(house) or not doPlayerRemoveMoney(cid, getHousePrice(house)) then doPlayerSendCancel(cid, "You do not have enough money.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end setHouseOwner(house, guid, true) local ret = "You have successfully bought this " if guild == true then ret = ret .. "hall" else ret = ret .. "house" end ret = ret .. ", remember to leave money at " if guild == true then ret = ret .. "guild owner " end if getBoolean(getConfigValue('bankSystem')) then ret = ret .. "bank or " end ret = ret .. "depot of this town for rent." doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, ret) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_BLUE) return true end Tag XML: <talkaction words="!buyhouse" filter="word-spaced" event="script" value="nome do seu script.lua"/> Como Funciona: O player fica em frente a porta da house, fala o comando, se estiver tudo certo ele compra a house. Bom é isso xP
  19. | Melhorado Mapa e Adicionado Varias Áreas | Novos Itens | Novas Questes | Novos Bichos | Adicionado VIP 15 | Retirado Bugs no Mapa... | Retirado Varios Bugs no Distro | Novo Visual do Templo | Critical System | Dodge System | Reset System,para resetar fale !reset | Guild Frags System | PvP Balanceado Agora todas vocações estão no balanço | Armas Arrumadas Para Melhor PvP | Varios Eventos | Invasões no Templo de Boss Automatico | Battle Field Event | City War | Adicionado CASTLE 24HORAS (COM CASTELO) e AVISOS DE INVASORES | Itens DONATES | Área DONATE ~~ (Só Entra Quem Usar o Itens de Premium Days) | Vários Novos Script | Fast Atk Arrumado | Frags no Look | Npc Hero Seller (Vende Itens Exclusivos para quem tiver honor points) Obs:Consegue no GFS) | Entre Muitas Outras Coisas | Confira ! | Senha do ADM: god/god IMAGENS Templo Parte Centro Treiners Abaixo do Templo Novo Visual Npc Hero Vendendo Itens Heros Castle WAR 24 Horas | Download http://www.4shared.c...ks_Vip_15.html? | Scan https://www.virustot...sis/1403811216/ | Créditos DeathRocks sirrubilax
  20. Boa noite meus amigos, estou com esse pequeno problema e não consigo resolver de jeito nenhum, já andei pesquisando sobre e encontrei alguns tópicos referente a acentuações em scripts, mas nenhum deu certo pra mim, posso estar colocando algo de errado, então por favor alguém consegue me ajudar? já coloquei este código no início do script .lua porém nada mudou. <?xml version="1.0" encoding="ISO-8859-1"?> Desde já agradeço a atenção!
  21. Introdução Ele simplesmente manda um efeito para o Top Level caso ele estiver online, além disso, ele checa quando o top é ultrapassado e o efeito passa automaticamente ao novo top. Instalação: Em data/creaturescripts/creaturescripts.xml adicione: <event type="login" name="TopEffect" event="script" value="topeffect.lua"/> <event type="advance" name="CheckTop" event="script" value="topeffect.lua"/>Agora crie um arquivo em data/creaturescripts/scripts com o nome topeffect.lua e adicione: --[[ Script by Bruno Minervino para o Tibia King Caso for postar, colocar os créditos ]] local config = { tempo = 10, --tempo em segundos mensagem = { texto = "[TOP]", --não use mais de 9 caracteres efeito = TEXTCOLOR_LIGHTBLUE --efeito para a função doSendAnimatedText }, efeito = 30, --efeito da função doSendMagicEffect globalstr = 5687 -- uma global storage qualquer q esteje vazia } --[[ Não mexa em nada abaixo ]] local topPlayer = getGlobalStorageValue(config.globalstr) > 0 and getGlobalStorageValue(config.globalstr) or 0 function onLogin(cid) local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1") if (query:getID() ~= -1) then local pid = query:getDataString("id") local name = query:getDataString("name") if getPlayerName(cid) == name then if topPlayer ~= getPlayerID(cid) then topPlayer = getPlayerID(cid) end setGlobalStorageValue(config.globalstr, pid) TopEffect(cid) end end registerCreatureEvent(cid, "CheckTop") return true end function onAdvance(cid, skill, oldlevel, newlevel) if skill == 8 then local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1") if (query:getID() ~= -1) then local level = tonumber(query:getDataString("level")) if level < newlevel and topPlayer ~= getPlayerID(cid) then doBroadcastMessage("O jogador " .. getPlayerName(cid) .. " tornou-se o novo Top Level. Parabens!", 22) topPlayer = getPlayerID(cid) doSaveServer() setGlobalStorageValue(config.globalstr, getPlayerID(cid)) TopEffect(cid) end end end return true end function TopEffect(cid) if not isPlayer(cid) then return true end if topPlayer == getPlayerID(cid) then doSendAnimatedText(getCreaturePosition(cid), config.mensagem.texto, config.mensagem.efeito) doSendMagicEffect(getCreaturePosition(cid), config.efeito) addEvent(TopEffect, config.tempo * 1000, cid) end end function getPlayerNameById(id) local query = db.getResult("SELECT `name` FROM `players` WHERE `id` = " .. db.escapeString(id)) if query:getID() ~= -1 then return query:getDataString("name") end return 0 end function getPlayerIdByName(name) local query = db.getResult("SELECT `id` FROM `players` WHERE `name` = " .. db.escapeString(name)) if query:getID() ~= -1 then return tonumber(query:getDataString("id")) end return 0 end function getPlayerID(cid) return getPlayerIdByName(getPlayerName(cid)) end Espero que gostem
  22. Olá xtibianos, Faz muito, muito tempo que eu não mexo com programação de scripts, porém, nessa semana bateu uma saudade, e tentei fazer algo de diferente pra passar o tempo, e acabei me empolgando, e fiz um sistema de auras, que é como uma bolha de luz que te rodeia (no meu caso é uma bolha de cura, porém você pode colocar o efeito de distância que quiser), e te cura continuamente enviando clones do efeito, ela só envia bolhas de cura se seu hp não estiver cheio. Você pode conferir como funciona, superficialmente, assistindo o vídeo a seguir : Para ativar a aura basta escrever "!aura on", e para desligar "!aura off". Bom, vamos aos códigos. na pasta data\talkactions\scripts, crie um arquivo chamado aura.lua, e cole o seguinte código nele : (é necessário dois storages disponíveis distintos) -- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end Logo após vá na em talkactions.xml, e cole o seguinte trecho : <talkaction words="!aura" event="script" value="aura.lua"/> E também, dentro do arquivo login.lua, localizado na pasta creatureevents\scripts, logo abaixo de "function onLogin(cid)", cole o seguinte trecho : aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) As configurações estão comentadas, então agora é só colocar suas preferências, aproveitar e usar. Lembrando que você pode mudar os efeitos da aura, o tempo de cada volta da aura(que é recomendável não mexer, se deixar o efeito padrão do script, que no caso é o efeito de luz), a quantidade de hp que o jogador irá restaurar e a porcentagem de chance que o jogador tem de recuperar hp em cada volta (pode recuperar hp mais de uma vez em uma mesma volta da aura). Fica ao seu dispor se deseja colocar se apenas vips usam a aura no script ou não, eu não incrementei pois estou meio sem tempo, mas não é algo difícil de se fazer. Obrigado, e bom proveito! OBS : Tomem bastante cuidado ao dar reload no talkactions no server enquanto há auras em ação, elas serão desativadas, e todos os players terão que desligá-las, e ligá-las novamente. (!aura off, e em seguida !aura on)
  23. Ola galera, cabei de fazer um npc de travel que move o player por uma rota determinada no mapa editor! Peguei como base a ideia dos novos npcs de travel da pxg... Vamos la então... 1* Vão na pasta lib/ e criem um arquivo la com o nome Travel.lua, e coloquem isso dentro... 2* Vão na pasta npc/ e criem o arquivo .xml do npc... Vou deixar um exemplo aki... 3* Vão na pasta npc/scripts/ e criem um arquivo la com o nome Water Travel.lua e colem isso dentro... Pronto, agora vamos as configurações... Configuraçoes: 1* Aki vocês configuram as posições dos npcs e as posições iniciais e finais da rota q o player vai seguir: 2* Aki vocês configuram a outfit q o player vai ganhar quando começar o travel, podendo ser outfit de moto, carro, kaike e afins: local outfit = getPlayerSex(cid) == 0 and {lookType = 1440} or {lookType = 1439} --outfit q o player vai ganhar, a 1* eh female e a 2* eh male 3* Caso não usem um servidor de pokemon, podem tirar essa parte... 4* Essa é a imagem de como vocês tem q configurar as rotas: Para fazer as rotas usem a ferramenta 'No-Logout' do mapa editor... lembrando que as posições finais tambem tem que ter o piso no-logout! Podem fazer a rota como quiserem, mas por favor, nao tentem 'forçar' o script. Importante: O npc tem q tar imóvel, ele n pode se mover da posição que foi colocada na tabela no script Water Travel.lua! Importante: Esse script foi inicialmente feito para travels na agua, mas eu testei aki e da pra fazer rotas na terra normalmente! Importante: Quem for usar num servidor pokemon olhem o spoiler abaixo: Espero que gostem, qualquer duvida ou bug podem postar aki, Vlw!
  24. alguém poderia me ajudar com esse script PF Esse script funciona como um boss room, tudo está 100%, menos a parte do remover a criatura que ao puxar a alavanca novamente ele cria uma nova e nao remove a que está na sala
  25. Satyrus

    Item com comando

    Alguém poderia fazer uma script pra mim? Queria que o item X usasse o comando !sellall quando clicar com o botão direito nele (usar)
×
×
  • Criar Novo...