Jump to content
×
×
  • Create New...

Search the Community

Showing results for tags 'script'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • 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
    • Cópia
    • Tutoriais
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Categories

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Sou

  1. alguem poderia me ajudar botar um efeito no meu servidor ao Player morrer tipo ele morre vem corpse serto! entao dai gostaria de bota um fantasminha ao morrer porem a corpse continua no chao apenas sai 1 efeito quando ele morre numero do efeito 65 versao 8.60 REP++
  2. Xtudomuito

    script Spell stop

    Queria uma spell que deixa o target parado. Explicaõ: eu atacou um target o ficara parado por 10 segundos n poderá se move, mas ninguém poderá o ataca. E fica uma statua em cima do target que foi ativado a spell, a statua ficará por 10 segundos depois some. Up
  3. PREZADOS, BOA NOITE Preciso fazer um sistema de upgrade de equipamentos semelhante ao sistema de cartas do Ragnarok; isto faz parte de uma estratégia para reduzir ao máximo o tempo que o jogador fica treinando skill e aumentar o tempo que ele passa em Hunts/ Quests. Deve funcionar da seguinte forma: As armas e equipamentos devem conter de 1 a 5 slots (estes slots devem ser pre-definidos, preferencialmente em weapons.xml e items.xml). O número de slots disponíveis deve aparecer na descrição do item, igual ao sistema de imbuiment. A partir disso, precisamos criar uma "Classe de Item", cartas ou essências de monstros, por exemplo, que adiciona poderes pré-definidos (não aleatórios) ao equipamento/ armadura ao dar "use with". O uso destes itens precisa ser restringido por tipo de equipamento, por exemplo: "Um Ruby concede +3 de ataque, só pode ser usado em espadas/ clavas/ machados/ arcos" "Uma essência de Demon concede +1.200 de vida, só pode ser usada em armaduras" "Uma essência de Mutated Rat concede +20 de regeneração de vida/ segundo, só pode ser usada em capacetes" "Uma essência de Slime concede +10% de dano contra jogadores, só pode ser usada em wands/ rods" Serei eternamente grato caso isto seja possível, Uso o servidor do malucooo, OTX TFS 1.3
  4. thloko

    NPC Battle (Psoul)

    Preciso de ajuda com o sistema de NPC duel da base psoul. Consigo startar a luta normalmente, porém, nao consigo atacar o pokemon do npc. (Você nao pode atacar esta criatura) Mesma coisa acontece com os lideres de gym. Alguem ja teve esse problema ?
  5. Pessoal, depois de muito tempo, eu descobri um jeito muito bom de balancear as vocações, deixando elas bem parecidas! É chato, mais vale a pena! Ja vou avisando que as partes de editar é você quem faz, só estou explicando aqui como você pode balancear as vocações de seus otservers PRIMEIRO Na pasta /data do seu ot, tem o arquivo vocations.xml, que contém as vocações: knight, sorcerer, paladin e druid Nela você balanceia exatamente como vou por aqui: Veja: <skill id="0" multiplier="1.5"/> <skill id="1" multiplier="2.0"/> <skill id="2" multiplier="2.0"/> <skill id="3" multiplier="2.0"/> <skill id="4" multiplier="2.0"/> <skill id="5" multiplier="1.5"/> <skill id="6" multiplier="1.1"/> Esses são os skills do Sorcerers, mais se vocês verem sequencialmente, os skills estão em ordem: Fist, Club, Sword, Axe, Distance, Shielding e Fishing(0,1,2,3,4,5,6) que será a velocidade que o player vai subir seus skills, o normal é 1.0 (para subir normalmente) mas o code acima é o dos sorcerers, então, mago tem que ser pelo menos 2.0 (2x) mais demorados pra subir os skills, do que um Knight (1.0[1x]) OBS: magic level tem no final da linha: manamultiplier="1.1" Então você faz assim: SKILLS DE FISHING SEMPRE COM 1.0 Sorcerers: Skills de Melee(menos o Fist Fightning) e Distance (2.0) Shielding e Fist (1.5) magic level (1.0) Knights: Skills de Melee e Shielding (1.0), Distance (1.5) Magic Level (4.0) Paladins: Skills de Distance e Shielding (1.0) Melee (1.5) Magic Level (2.5) Druids: Skills de Melee(menos o Fist Fightning) e Distance (1.9) Shielding e Fist (1.4) magic level (1.1) Depois disso, balanceie os status de mana e vida das vocações, de um modo que não exagere(por exemplo, knight quando upa level ganha 30 de life e sorcerer ganha 300 [LOL]) Após disso, Deixe os skills do seu ot alto, sempre pra cima de 25x, no mínimo 25x, e skills de magic level pode ser 2x. Va no /data/weapons/weapons.xml copie o code abaixo e cole no arquivo weapons.xml <?xml version="1.0"?> <weapons> ----------------- Sorcerer Wands ----------------- <wand id="2190" lvl="8" range="7" mana="0" enabled="1" script="wand of vortex.lua"><vocation name="Sorcerer"/><vocation name="Master Sorcerer"/><vocation name="Supreme Sorcerer"/></wand> <wand id="2191" lvl="15" range="6" mana="0" enabled="1" script="wand of dragonbreath.lua"><vocation name="Sorcerer"/><vocation name="Master Sorcerer"/><vocation name="Supreme Sorcerer"/></wand> <wand id="2188" lvl="22" range="5" mana="0" enabled="1" script="wand of plague.lua"><vocation name="Sorcerer"/><vocation name="Master Sorcerer"/><vocation name="Supreme Sorcerer"/></wand> <wand id="2189" lvl="30" range="4" mana="0" enabled="1" script="wand of cosmic energy.lua"><vocation name="Sorcerer"/><vocation name="Master Sorcerer"/><vocation name="Supreme Sorcerer"/></wand> <wand id="2187" lvl="40" range="3" mana="0" enabled="1" script="wand of inferno.lua"><vocation name="Sorcerer"/><vocation name="Master Sorcerer"/><vocation name="Supreme Sorcerer"/></wand> ------------------- Druid Rods ------------------- <wand id="2182" lvl="8" range="7" mana="0" enabled="1" script="snakebite rod.lua"><vocation name="Druid"/><vocation name="Elder Druid"/><vocation name="Druid of Wrath"/></wand> <wand id="2186" lvl="15" range="6" mana="0" enabled="1" script="moonlight rod.lua"><vocation name="Druid"/><vocation name="Elder Druid"/><vocation name="Druid of Wrath"/></wand> <wand id="2185" lvl="22" range="5" mana="0" enabled="1" script="volcanic rod.lua"><vocation name="Druid"/><vocation name="Elder Druid"/><vocation name="Druid of Wrath"/></wand> <wand id="2181" lvl="30" range="4" mana="0" enabled="1" script="quagmire rod.lua"><vocation name="Druid"/><vocation name="Elder Druid"/><vocation name="Druid of Wrath"/></wand> <wand id="2183" lvl="40" range="3" mana="0" enabled="1" script="tempest rod.lua"><vocation name="Druid"/><vocation name="Elder Druid"/><vocation name="Druid of Wrath"/></wand> ------------ Paladin Spears and Arrow ------------ <distance id="2545" range="6" enabled="1" exhaustion="0" hitchance="70" ammo="removecount" script="poison arrow.lua"></distance> <distance id="2546" range="6" enabled="1" exhaustion="0" hitchance="60" ammo="removecount" script="explosive arrow.lua"></distance> </weapons> Isso fará com que todas as suas wands NÃO UTILIZEM MANA PARA SEREM USADAS Depois, dentro da pasta /data/weapons/scripts/ modifique todas as suas wands e rods. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, >>>>>>>ATAQUE MINIMO<<<<<<<<<, 0, >>>>>>>>>>>ATAQUE MÁXIMO<<<<<<<<<<<<<<<<) function onUseWeapon(cid, var) return doCombat(cid, combat, var) end Então você edita o Ataque Mínimo e o Ataque Maximo de cada uma, SEM MUDAR MAIS NADA Lembrando que, onde esta escrito ATAQUE MINIMO e ATAQUE MAXIMO no code acima, você deve adicionar o sinal de menos, se não a varinha ao invés de causar dano, vai curar quem você esta atacando! Primeira Wand: -20 a -40 Segunda Wand: -40 a -70 Terceira Wand: -70 a -110 Quarta Wand: -110 a -160 Quinta Wand: -160 a -220 Pelo que vocês devem estar notando, as varinhas ALÉM de não diminuir sua mana, terá quase o TRIPLO, de ataque que tinha antes, então fica bem rox assim! MINHA OPINIÃO (PODEM PULAR ESSA PARTE SE QUISEREM, POIS ELA EXPLICA O QUE EU ACHO LITERALMENTE SOBRE O BALANCEAMENTO) Utilize o OT itemeditor e deixem as armas de knight mais fortes, avenger por exemplo, é bom por uns 75/75, dependendo da arma, aumenta só uns 5 de atk, defesa tambem Armaduras não tem muita importância aumentar, pois afetaria todas as vocações. Na pasta /data/spells/spells.xml na magia Summon Creature, coloque para somente os druids fazerem monstros, e coloquem para que eles façam qualquer tipo de monstro, isso os deixaria mais "cobiçados", sorcerers façam magias novas, como a que eu citei no quote (armageddon[uE 5x mais forte]), Paladins e Knights, va no /data/vocations.xml e mudem o: atkspeed="1500" promoted_atkspeed="1000" Para atkspeed="500" promoted_atkspeed="250" Assim seus ataques teriam mais velocidade, e poderiam chegar ao nível dos mages. Faça os mages terem Concluindo: Knights e Palys batendo 1000 por segundo. Sorcerers podendo tirar entre 200 a 5000 (dependendo do quanto de mana eles tiverem para uma magia poderosa como a armageddon, ou algo parecido, É LÓGICO!!! Eles não vão ficar soltando armageddon a cada segundo, imagine o que seria do server assim??? ACONSELHO USAR REGENERAÇÃO DE MANA RAPIDO OU MANA RUNE) Druids criando demons, que podem tirar de 0 a 600 por segundos, sem contar as varinhas que eles podem usar e/ou SD's. Ta ae, no meu ot, é balanceado desse jeito, e ninguem reclama muito do balanceamento, pelo contrário, acham muito bom! FIM! Quem tem dúvidas, favor postar, e comentem plx. Obrigado a todos que pelo menos vieram ver meu tópico. E Feliz 2008 xD
  6. Esse tutorial é para você criar uma chest por meio de script e adicionando um determinado level para abrir o baú então lá vai. Em action/script crie um arquivo lua com um nome da sua quest , exemplo moltresquest.lua Editando Tag em action.xml Editando a tag Por último pelo remere´s map editor , coloque uma chest no lugar desejado e em "properties" coloque no Unique ID número do unique que você colocou no script. Bom se a área estiver errada podem mover porfavor. Obrigado pela compreensão MaxxSila
  7. Olá galera do XT, estou trazendo aqui, meu primeiro NPC, um NPC que teleporta se tiver o item X, tudo configurável! Vá em data/npcs/scripts e copia e cola um arquivo.lua renomeia ele para tp.lua e cola o seguinte código: 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 function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end ------------#Configurações#---------------- local config = { tp1 = {x=100, y=100, z=7}, -- coordenadas pra onde ele irá ao falar aonde está "ir". tp2 = {x=100, y=100, z=7}, -- coordenadas pra onde ele irá ao falar aonde está "ir2". tp3 = {x=100, y=100, z=7}, -- coordenadas pra onde ele irá ao falar aonde está "ir3". item1 = 2160, -- id do item 1 item2 = 2148, -- id do item 2 item3 = 2158, -- id do item 3 qtd1 = 2, -- quantidade a ser removida do item 1 qtd2 = 5, -- quantidade a ser removida do item 2 qtd3 = 7, -- quantidade a ser removida do item 3 } ----------#Fim das configurações#---------- ------------#*#Início do NPC#*#-------------- if msgcontains(msg, 'ir1') then -- o que ele tem que falar. if doPlayerRemoveItem(cid, config.item1, config.qtd1) then doTeleportThing(cid, config.tp1) -- não mexa. else selfSay("Você não tem "..config.qtd1.." {"..getItemNameById(config.item1).."s}.", cid) -- msg que retorna caso ele não tenha o item. end elseif msgcontains(msg, 'ir2') then -- o que ele tem que falar. if doPlayerRemoveItem(cid, config.item2, config.qtd2) then doTeleportThing(cid, config.tp2) -- não mexa. else selfSay("Você não tem "..config.qtd2.." {"..getItemNameById(config.item2).."s}.", cid) -- msg que retorna caso ele não tenha o item. end elseif msgcontains(msg, 'ir3') then -- o que ele tem que falar. if doPlayerRemoveItem(cid, config.item3, config.qtd3) then doTeleportThing(cid, config.tp3) -- não mexa. else selfSay("Você não tem "..config.qtd3.." {"..getItemNameById(config.item3).."s}.", cid) -- msg que retorna caso ele não tenha o item. end end ------------#*#Fim do NPC#*#-------------- return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Feito isso, vá em data/npcs copia um arquivo.xml e renomeia ele para Teleport. Abra com o bloco de notas ou outro editor, e cole este arquivo: <?xml version="1.0" encoding="ISO-8859-1"?> <npc name="Gerson" script="data/npc/scripts/tp.lua" walkinterval="3000" floorchange="0"> <health now="100" max="100"/> <look type="367" head="0" body="38" legs="114" feet="94" addons="0"/> <parameters> <parameter key="message_greet" value="Eu posso levar você para {ir1}, {ir2}, {ir3}."/> <parameter key="message_farewell" value="Adeus!"/> <parameter key="message_walkaway" value="Que bons ventos o levem!"/> </parameters> </npc> Configurando o arquivo do npc: Tudo é feito aqui: ------------#Configurações#---------------- local config = { tp1 = {x=100, y=100, z=7}, -- coordenadas pra onde ele irá ao falar aonde está "ir". tp2 = {x=100, y=100, z=7}, -- coordenadas pra onde ele irá ao falar aonde está "ir2". tp3 = {x=100, y=100, z=7}, -- coordenadas pra onde ele irá ao falar aonde está "ir3". item1 = 2160, -- id do item 1 item2 = 2148, -- id do item 2 item3 = 2158, -- id do item 3 qtd1 = 2, -- quantidade a ser removida do item 1 qtd2 = 5, -- quantidade a ser removida do item 2 qtd3 = 7, -- quantidade a ser removida do item 3 } ----------#Fim das configurações#---------- Em tp1, tp2, tp3 coloque a posição de cada lugar que ele será mandado. Em item1, item2, item3 coloque o ID do item que você quer que seja removido para teleportar o jogador. Em qtd1, qtd2, qtd3 coloque apenas a quantidade a ser removida. Bom galera, este é meu primeiro script espero que gostem!! @Edit Hoje dei uma editada no NPC e removi 10 linhas. Gostaria que me dessem ideias de como melhorar este NPC, ou criar outros.
  8. Kevin vem 69

    Cura em area

    Ola boa tarde estou precisando de uma spell de cura em area que N cure os bichos apenas player e sumons, alguem teria por aqui ???
  9. Bom gente... Eu queria pedir um script que fosse assim !status me, ou !me, para informar, o level, a mana, o HP, dinheiro e outras coisas se tiver da pessoa... É bem simples, mas eu não sei mexer muito com scripts, então nem sei fazer! TFS 0.4 8.6 Eu ja vi um script assim pelo xtibia, mas deu erro no meu server e tive que reseta-lo... Por favor façam um sem erros :s Obrigado! REP+
  10. -= Advanced Reset System 2.0 =- By: MarcelloMkez Fala galerinha, to aqui dinovo , mas agora e com a versão 2.0 do meu 'Advanced Reset System'. E como prometido, trazendo algumas novidades: _________________________________________________________________________________________________________________________________ - Resets agora armazenados diretamente na 'DataBase', acabando com o sistema de Storages, e com o problema dos resets atrasados no look; - Opções para Abilitar e Desabilitar Condições como por exemplo: 'look = true' , [true,false] configurando como achar melhor; - E agora '[sTAGES]', para 'premmy' (Premium Account) e 'free' (Free Account); - Instala o System e cria a Tabela de Resets com o comando "/installreset"; OBS: Sistema testado em 'Mysql' não tenho certeza si funciona em 'sql'; e Testando em: 8.50 (TFS 0.3.6) e 8.6 (TFS 0.4.0) __________________________________________________________________________________________________________________________________ Vá em data/Talkactions, e crie um arquivo .lua e nomeie para advancedResetSystem.lua e Adicione Isso: --[[ <(Advanced Reset System 2.0)> Autor: MarcelloMkez. Contato: (marcello_dirt@hotmail.com) Versão: 2.0 Testado em: 8.50 e 8.60 TFS: 0.3.6 and 0.4.0 Fórum: http://www.xtibia.com/forum/topic/142463-advanced-reset-system-20/ -=[Características]=- ~( Versão 2.0 )~ - Resets agora Armazenados na DataBase; (Sem Valor de Storage) - Instala o System e cria a Tabela de Resets com o comando "/installreset"; - Resets no Look do jogador ex: 22:10 You see Marcello [Reset 2] (Level 8). He is an elder druid.; - [sTAGES] para "Premium Account" e "Free Account"; ]] --=[Functions]=-- -- installReset()' [instala o Sistema.] -- tableResetInstall()' [Verifica Se o Sistema ja foi instaladao.] -- nowReseting()' [Verifica, retorna o erro ou reseta.] -- getPlayerReset(cid)' [Pega numero de resets do player.] -- checLevelStageReset(cid)' [Verifica o Level para Resetar.] -- newReset(cid)' [Verifica todas as Condições de Reset.] -- addValue(value)' [Adiciona numero de resets.] --=[Comandos de Jogadores]=-- -- "/installreset" -- Só será usado uma vez, para instalar o sistema. -- "!resetar" -- Para Resetar. function onSay(cid, words, param) if words =="!resetar" then --[ Condições de Reset ] -- local coNdConf = { needPz = true, -- Precisa estar em Pz pra resetar? [true, false] needPa = false, -- Precisa ser Premium Account Pra resetar? [true, false] withe = false, -- Players com Pk Withe podem resetar? [true, false] red = false, -- Players com Pk Red pode resetar? [true, false] battle = false, -- Players precisão estar sem battle pra resetar? [true, false] teleport = true, -- Teleportar Player para o templo após resetar? [true, false] look = false, -- Aparecer Resets no Look do Player? [true, false] pid = getPlayerGUID(cid), -- Não Mexer. --[ Configurações do Reset ] -- resetConf = { Level = 350, -- Level Necessário para Resetar. [Valor] backLvl = 8, -- Level que voltará após o Reset. [Valor] time = 5, -- Tempo para o Player deslogar ao resetar, em segundos. [Valor] }, } --[[>> STAGES <<]]-- x=true;X=true -- Não Mexer. local stage = {Abilitar = {x}, Desabilitar = {}, --<< Abilitar Stages?? >>-- [{x};{}] -- [RESETS] | [PREMMY] | [FREE] stage1= {resets= 4, premmy= 330, free= 350}, stage2= {resets= 9, premmy= 340, free= 355}, -- EXPLICANDO e Configurando stages. (Se estiver Abilitado [Abilitar = {x}]) stage3= {resets= 14, premmy= 355, free= 360}, -- resets = Número de resets para o Stage; stage4= {resets= 19, premmy= 360, free= 365}, -- premmy = Level necessário para Premium Accounts; stage5= {resets= 24, premmy= 370, free= 380}, -- free = Level necessário para Free Accounts; stage6= {resets= 29, premmy= 380, free= 390}, -- Coloque em Ordem... stage7= {resets= 35, premmy= 400, free= 410}, -- [OBS: MARQUE UM "X" PARA ABILITAR OU DESABILITAR OS STAGES] stage8= {resets= 40, premmy= 410, free= 440}, -- EX: para desabilitar mude: Abilitar = {}, Desabilitar = {x} stage9= {resets= 45, premmy= 450, free= 450}, stage10={resets= 50, premmy= 465, free= 465}, } --[[>> FIM STAGES <<]]-- --=[Pega Valor de Resets]=-- function getPlayerReset(cid) local qr = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..coNdConf.pid..";") rss = qr:getDataInt("reset", coNdConf.pid) if rss < 0 then rss = 0 end return rss end local success = " ~~ Sucesso! ~~ \nVocê tem agora "..(getPlayerReset(cid)+1).." resets. \nVocê será deslogado em "..coNdConf.resetConf.time.." segundos." ;err = doPlayerSendTextMessage local qrt = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..coNdConf.pid..";");rss_db = qrt:getDataInt("reset", coNdConf.pid) local lvl_query = "UPDATE `players` SET `level` = "..(coNdConf.resetConf.backLvl)..", `experience` = 0 WHERE `id`= " .. coNdConf.pid .. ";" local reset_query = "UPDATE `players` SET `reset` = "..(getPlayerReset(cid)+(1)).." WHERE `id`= " .. coNdConf.pid .. ";" local nolook_query = "UPDATE `players` SET `description` = '' WHERE `players`.`id`= " .. coNdConf.pid .. ";" local look_query = "UPDATE `players` SET `description` = ' [Reset "..(getPlayerReset(cid)+(1)).."]' WHERE `players`.`id`= " .. coNdConf.pid .. ";" --=[Reseta]=-- function addValue(value) if coNdConf.look == false then doRemoveCreature(cid) db.executeQuery(lvl_query);db.executeQuery(reset_query);db.executeQuery(nolook_query) else doRemoveCreature(cid) db.executeQuery(lvl_query);db.executeQuery(reset_query);db.executeQuery(look_query) return LUA_NO_ERROR end end function nowReseting() if (getPlayerLevel(cid) < coNdConf.resetConf.Level) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "- Level Necessário Para o Reset ["..coNdConf.resetConf.Level.."]. Faltam "..coNdConf.resetConf.Level-getPlayerLevel(cid).." level's para você Resetar. -") return true end if getPlayerLevel(cid) >= coNdConf.resetConf.Level and (coNdConf.teleport == false) then doPlayerPopupFYI(cid, success) addEvent(addValue, coNdConf.resetConf.time*1000, value) else doPlayerPopupFYI(cid, success) addEvent(doTeleportThing, coNdConf.resetConf.time*900, cid, getTownTemplePosition(getPlayerTown(cid))) addEvent(addValue, coNdConf.resetConf.time*1000, value) return true end end --[sTAGES Nao mexer em nada.]-- function checkLevelStageReset(cid) local stages = { {resets= stage.stage1.resets, premmy= stage.stage1.premmy, free= stage.stage1.free}, {resets= stage.stage2.resets, premmy= stage.stage2.premmy, free= stage.stage2.free}, {resets= stage.stage3.resets, premmy= stage.stage3.premmy, free= stage.stage3.free}, {resets= stage.stage4.resets, premmy= stage.stage4.premmy, free= stage.stage4.free}, {resets= stage.stage5.resets, premmy= stage.stage5.premmy, free= stage.stage5.free}, {resets= stage.stage6.resets, premmy= stage.stage6.premmy, free= stage.stage6.free}, {resets= stage.stage7.resets, premmy= stage.stage7.premmy, free= stage.stage7.free}, {resets= stage.stage8.resets, premmy= stage.stage8.premmy, free= stage.stage8.free}, {resets= stage.stage9.resets, premmy= stage.stage9.premmy, free= stage.stage9.free}, {resets=stage.stage10.resets, premmy=stage.stage10.premmy, free=stage.stage10.free}, } local resets = getPlayerReset(cid) for i, tab in ipairs(stages) do if resets <= tab.resets then coNdConf.resetConf.Level = isPremium(cid) and tab.premmy or tab.free break end end if (getPlayerLevel(cid) < coNdConf.resetConf.Level) then err(cid, MESSAGE_STATUS_CONSOLE_BLUE, "- Level Necessário Para o Reset ["..coNdConf.resetConf.Level.."]. Faltam "..coNdConf.resetConf.Level-getPlayerLevel(cid).." level's para você Resetar. -") return TRUE end if getPlayerLevel(cid) >= coNdConf.resetConf.Level and (coNdConf.teleport == false) then doPlayerPopupFYI(cid, success) addEvent(addValue, coNdConf.resetConf.time*1000, value) else doPlayerPopupFYI(cid, success) addEvent(addValue, coNdConf.resetConf.time*1000, value) addEvent(doTeleportThing, coNdConf.resetConf.time*900, cid, getTownTemplePosition(getPlayerTown(cid))) return true end end function newReset(cid) if(coNdConf.needPz == true) and (getTilePzInfo(getCreaturePosition(cid)) == LUA_ERROR) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa estar em Protection Zone Para Resetar. -") return TRUE end if(coNdConf.needPa == true) and not isPremium(cid) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa ser Premium Account para Resetar. -") return TRUE end if(coNdConf.withe == false) and (getCreatureSkullType(cid) == 3) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você não pode resetar em condições de PK Withe. -") return TRUE end if(coNdConf.red == false) and (getCreatureSkullType(cid) == 4) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você não pode resetar em condições de PK Red. -") return TRUE end if(coNdConf.battle == true) and (getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa estar sem Battle para Resetar. -") return TRUE end local xy = {true,false} table.insert(stage.Abilitar, false) table.insert(stage.Desabilitar, false) if stage.Abilitar[1] == xy[1] and stage.Desabilitar[1] == xy[2] then checkLevelStageReset(cid) elseif stage.Abilitar[1] == xy[2] and stage.Desabilitar[1] == xy[1] then nowReseting() else doPlayerPopupFYI(cid, "LUA_ERROR; Configure corretamente o Sistema de STAGES!") end return true end function tableResetInstall() print(not rss_db and LUA_ERROR or "Tabela de Resets: Instalada ... [success] ") addEvent(newReset, 1000, cid) return false end if tableResetInstall() then end end --=[install System]=-- function installReset() if db.executeQuery("ALTER TABLE `players` ADD reset INT(11) NOT NULL DEFAULT 0;") then print("[MarcelloMkez] -= Advanced Reset System 2.0 por DataBase =- Instalado com sucesso!") return TRUE end print('[Advanced Reset System/MarcelloMkez] Não foi possível instalar o Sistema.') return FALSE end local tt = { "Preparando Instalação...", "Instalando: TableReset Db...", "Instalando: getPlayerReset()...", "Instalando: addValue()...", "Instalando: checkLevelStageReset()...", "Instalando: newReset() and nowReseting()...", "Finalizando Instalação...", "...", success = { "Iniciando...", "function: TableReset Db... [success]", "function: getPlayerReset()... [success]", "function: addValue(value)... [success]", "function: checkLevelStageReset()... [success]", "function: newReset() and nowReseting()... [success]", "Fim da Instalação. ", "by: ~~ MarcelloMkez ~~ \nContato: marcello_dirt@hotmail.com", inst = {"MarcelloMkez","Advanced Reset System 2.0 por DataBase" }, }, } if words == "/installreset" and getPlayerAccess(cid) >= 3 then function install() if installReset() then print(""..tt.success[7].."") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,""..tt.success[8].."") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "["..tt.success.inst[1].."] -="..tt.success.inst[2].."=- Instalado com sucesso!") else print("["..tt.success.inst[1].."] FALHA NA INSTALAÇÃO! [O sistema ja foi instalado].") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "["..tt.success.inst[1].."] FALHA NA INSTALAÇÃO! [O sistema ja foi instalado].") end return 1 end function concl(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[7].."") print(""..tt[8].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[7].."") doPlayerSendTextMessage(cid, typetx,""..tt[8].."") addEvent(install, 1000,cid) end function finall(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[6].."") print(""..tt[7].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[6].."") doPlayerSendTextMessage(cid, typetx,""..tt[7].."") addEvent(concl, 3000,cid) end function installDd(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[5].."") print(""..tt[6].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[5].."") doPlayerSendTextMessage(cid, typetx,""..tt[6].."") addEvent(finall, 1000,cid) end function installCc(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[4].."") print(""..tt[5].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[4].."") doPlayerSendTextMessage(cid, typetx,""..tt[5].."") addEvent(installDd, 1000,cid) end function installBb(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[3].."") print(""..tt[4].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[3].."") doPlayerSendTextMessage(cid, typetx,""..tt[4].."") addEvent(installCc, 1000,cid) end function installAa(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[2].."") print(""..tt[3].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[2].."") doPlayerSendTextMessage(cid, typetx,""..tt[3].."") addEvent(installBb, 1000,cid) end function toInstall() local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[1].."") print(""..tt[2].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[1].."") doPlayerSendTextMessage(cid, typetx,""..tt[2].."") addEvent(installAa, 1000,cid) end function preparation() local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt[1].."") doPlayerSendTextMessage(cid, typetx,""..tt[1].."") addEvent(toInstall, 3000,cid) end if preparation() then end end return 1 end --=[by: MarcelloMkez]=-- E em Talkactions.xml adicione isso: <talkaction words="!resetar;/installreset" event="script" value="advancedResetSystem.lua"/> Instalando o Sistema - Após adicionar o script em TalkActions e em Talkactions.xml Use o comando "/installreset" em jogo, OBS: o System so pode ser Instalado pelo GOD! A a instalação será mostrada no default, e no Distro! Apos isso, Sistema Instalado! 'Explicando stages: Stage 1: stage1= {resets= 4, premmy= 330, free= 350}, resets: ---- Quantidade de Resets para o stage. premmy: ---- Level que Premmium Accounts podera Resetar. (no caso ate 4 resets) free: ------ Level que Free Accounts podera Resetar. (no caso ate 4 resets) --- Bom como vcs pode ver, vai ate o 'Stage 10': stage10={resets= 50, premmy= 465, free= 465}, --- Intao irei explicar, caso queiram adicionar mais stages... Use 'Ctrl + G' com o script aberto, e digite 71, e aperte enter, logo ira direcionar para linha 71 que no caso é esta: stage10={resets= 50, premmy= 465, free= 465}, - Abaixo dela adicione uma exatamente igual, so modificando o numero do stage ficando assim: stage10={resets= 50, premmy= 465, free= 465}, stage11={resets= 55, premmy= 465, free= 465}, Agora na linha 134 vai ta esta: {resets=stage.stage10.resets, premmy=stage.stage10.premmy, free=stage.stage10.free}, Voce faz a mesma coisa adicionando embaixo da linha 134 porem mudando os numeros, ficando assim: {resets=stage.stage10.resets, premmy=stage.stage10.premmy, free=stage.stage10.free}, {resets=stage.stage11.resets, premmy=stage.stage11.premmy, free=stage.stage11.free}, Pronto, Ja esta adicionado o 'Stage 11' xD, Assim voce pode adicionar quantos stages quiser, basta configurar corretamente... Mais duvidas postem aqui. Aqui termino o post! espero que gostem, grato: ~~MarcelloMkez~~
  11. Eu tava meio sem tempo pq tava editando meu ot, agr q ele ja ta perfect vo posta uns scripts q eu fiz e achei interessante postar ake: Nesse tópico vou postar um script mt ultil em otservs q tem bastante eventos automaticos, ou ateh msm eventos por actions, ou outras coisas se preferirem colocar, vou postar um script para que ninguem possa entrar se estiver de mc. Entao neh...vou para de fala e comçar logo, vamo lá ! Em movements/scripts crie um arquivo.lua chamado multi_block e nele coloque isso: Agora em movements.xml coloque isso: <movevent type="StepIn" uniqueid="2102" event="script" value="multi_block.lua"/> E no seu mapa em todos os pisos q vc escolher para o player nao usar mc, clique 2x e em Unique ID coloque: 2102. Comentem ae galera, lembrando q ainda vou postar mts outros scripts q eu fiz =]]
  12. Bom, fiz uma pequena edição no Sistema de Checkpoints v1.0 e coloquei um mod pra otclient. Simples de instalar... No Servidor Na pasta mods de seu servidor, crie um arquivo chamado Checkpoint.xml e adicione o seguinte código No Client 1. Faça o download do arquivo; . 2. Extraia os arquivos na pasta mods do seu CLIENT; Créditos [member=Caronte] ~ pela ideia e pelo desenvolvimento do sistema [member=david0703] ~ pelo mod no OTC. DOWNLOAD SCAN
  13. Olá galera do :XTibia_smile: , estou com este tutorial para iniciantes! Adicionando novos monstros em seu OT! Isto é bastante simples, e muitas pessoas quando começa a mecher com OTserver's não sabe. (Eu não sabia ) Vá na seção de Scripting - Npcs e Monsters! (CLIQUE AQUI) Encontre um monstro que você goste ou crie um você mesmo! (CLIQUE AQUI E SAIBA TUDO SOBRE NPCS, MONSTER E SPELLS) Sim, você pegou ou criou um monstro... Sim, você pegou ou criou um monstro...Só que na hora de sumona-lo deu um erro, e o monstro não apareceu! Simples, na pasta <data/monster> tem um arquivo monsters, e nele precisa ser adicionado o novo monstro de seu OT! Para adiciona-lo adicione esta linha: monster name="Amazon" (Basta colocar o nome do novo monstro!) file="Amazon.xml" (Coloque o nome do arquivo XML, arquivo do monstro) Espero que gostem deste meu tutorial! Comentem!!!
  14. Olá a todos, Venho trazer um servidor que achei aqui na bagunça.Está na versão 9.60 do Tibia, Mapa Global Completo com Training Offline Gray Island, Quirefang, Montarias Completas, Magias Atuais , Task System 100%, War Of Emperium, Raids automaticas, War Castle, Dota, Zombie event, RookWar (Próprio), Fire Storm (Próprio), Database Completa pra não haver erros. Respawns próprios e personalizados. Como podem ver o servidor é mapa global mas possui modificações nos sistemas. Acompanha o site que utilizava, é um Gesior Acc sem erros com sistemas de pagamento automático (PayPal e PagSeguro), deve-se modificar os email nos scripts de pagamento. Download do Servidor: http://www.2shared.c..._Tibia_960.html Scan: https://www.virustot...sis/1348361601/ Sources do Servidor: http://www.2shared.c...ources_960.html Algumas imagens: - http://upload.crazzy...80f2c8dfae401b9 - http://upload.crazzy...49c8cbcfc95500a Obs: *Não tente usar teleports falantes; *Distro está em 32bits: TBOT.exe! Mas acompanha sources. *Modifique os emails nos sitemas de pagamento. *Retirei o mapa pra fazer o Scan. Offline Training 9.60.rar
  15. Eae Galera , Blz? Hoje vim Postar um Servidor de War Proprio com Varios Sistemas proprias na VERSAO [2.0] ! Entao Vamos La! • [ VERSAO 2.0 ] • Melhor Servidor De War • Suport MYSQL • Servidor Estavel Sem bugs 100% • Distro Usado: Tfs 0.3.6 • Vocaçoes nao esta Balanceado Direito • 8 Mapas • 4 Mini Games [Modes] : CTF - DOTA - TDM - LEADER • Retirado todos os Monster do OT para ficar mais Leve [•] Sistemas [•] • IMAGENS DO SERVER • (•) Donwload Link (•) Bug do ChangeMap - Arrumado https://mega.co.nz/#!FV9yHaDQ!B8B_MiR0eR_4KX9scNPfWwuwo6hBqbmLsWbFbwz_Ykw [•] Creditos: Nextbr
  16. Carlin War by Alissow Créditos: Delton (alguns scripts) Comedinha (distro) Alissow (O resto todo) Cipsoft (Carlin revamped map) TFS team Info: Versão client 8. 5 Acc Team [A] = 1/1 Acc Team [b.] = 2/2 Map carlin Acc do God: god/god Distro TFS 0.3.4pl2 Npcs global Deathbroadcast system Magias ajustadas Invasões na city - Morgaroth - Orshabaal - Ghazbaran - Ferumbras Sqlite recomendado Entre outros Screenshots: Download: Servidor: 4shared Tamanho: 9.00 MBs Download: Clique Aqui Link protegido: http://lix.in/-57731a Scan: Aqui Divirtam-se e Comentem
  17. Galera, meu ot está rodando tudo certinho, baiak 8.6 e tal. A questão é que esse bendito NPC não aparece no jogo, ao abrir o sistema reporta esse error... já tentei mudar o nome para somente Bank, mas continua na mesma. Segue os dados Error: Cannot find npc with name: Bank bank.luabank.xml
  18. Adaptação pra source 8.54+ LEMBRE-SE, ISSO É NA SOURCE DO SERVIDOR Vamos ao código. protocolgame.h Embaixo de void AddShopItem(NetworkMessage_ptr msg, const ShopInfo item); Adicione void parseExtendedOpcode(NetworkMessage& msg);void sendExtendedOpcode(uint8_t opcode, const std::string& buffer); protocolgame.cpp Embaixo de uint32_t key[4] = {msg.GetU32(), msg.GetU32(), msg.GetU32(), msg.GetU32()};enableXTEAEncryption();setXTEAKey(key); Adicione // notifies to otclient that this server can receive extended game protocol opcodesif(operatingSystem >= CLIENTOS_OTCLIENT_LINUX)sendExtendedOpcode(0x00, std::string()); Embaixo de void ProtocolGame::AddShopItem(NetworkMessage_ptr msg, const ShopInfo item){const ItemType& it = Item::items[item.itemId];msg->AddU16(it.clientId);if(it.isSplash() || it.isFluidContainer())msg->AddByte(fluidMap[item.subType % 8]);else if(it.stackable || it.charges)msg->AddByte(item.subType);elsemsg->AddByte(0x01);msg->AddString(item.itemName);msg->AddU32(uint32_t(it.weight * 100));msg->AddU32(item.buyPrice);msg->AddU32(item.sellPrice);} Adicione void ProtocolGame::parseExtendedOpcode(NetworkMessage& msg){uint8_t opcode = msg.GetByte();std::string buffer = msg.GetString();// process additional opcodes via lua script eventaddGameTask(&Game::parsePlayerExtendedOpcode, player->getID(), opcode, buffer);}void ProtocolGame::sendExtendedOpcode(uint8_t opcode, const std::string& buffer){// extended opcodes can only be send to players using otclient, cipsoft's tibia can't understand themNetworkMessage_ptr msg = getOutputBuffer();if(msg){TRACK_MESSAGE(msg);msg->AddByte(0x32);msg->AddByte(opcode);msg->AddString(buffer);}} Embaixo de case 0x1E: // keep alive / ping responseparseReceivePing(msg);break; Adicione case 0x32: // otclient extended opcodeparseExtendedOpcode(msg);break; enums.h Embaixo de enum GuildLevel_t{GUILDLEVEL_NONE = 0,GUILDLEVEL_MEMBER,GUILDLEVEL_VICE,GUILDLEVEL_LEADER}; Substitua o OperatingSystem por este enum OperatingSystem_t{CLIENTOS_LINUX = 0x01,CLIENTOS_WINDOWS = 0x02,CLIENTOS_OTCLIENT_LINUX = 0x0A,CLIENTOS_OTCLIENT_WINDOWS = 0x0B,CLIENTOS_OTCLIENT_MAC = 0x0C,};/ player.h Embaixo de void sendCreatureShield(const Creature* creature) Adicione void sendExtendedOpcode(uint8_t opcode, const std::string& buffer){if(client) client->sendExtendedOpcode(opcode, buffer);} luascript.cpp Embaixo de void LuaScriptInterface::registerFunctions(){ Adicione //doSendPlayerExtendedOpcode(cid, opcode, buffer)lua_register(m_luaState, "doSendPlayerExtendedOpcode", LuaScriptInterface::luaDoSendPlayerExtendedOpcode); Embaixo de SHIFT_OPERATOR(int32_t, LeftShift, <<)SHIFT_OPERATOR(int32_t, RightShift, >>)SHIFT_OPERATOR(uint32_t, ULeftShift, <<)SHIFT_OPERATOR(uint32_t, URightShift, >>)#undef SHIFT_OPERATOR Adicione int32_t LuaScriptInterface::luaDoSendPlayerExtendedOpcode(lua_State* L){//doSendPlayerExtendedOpcode(cid, opcode, buffer)std::string buffer = popString(L);int opcode = popNumber(L);ScriptEnviroment* env = getEnv();if(Player* player = env->getPlayerByUID(popNumber(L))) {player->sendExtendedOpcode(opcode, buffer);lua_pushboolean(L, true);}lua_pushboolean(L, false);return 1;} luascript.h Embaixo de virtual void registerFunctions(); Adicione static int32_t luaDoSendPlayerExtendedOpcode(lua_State* L); creatureevent.h . Substitua CREATURE_EVENT_PREPAREDEATH Por isso CREATURE_EVENT_PREPAREDEATH,CREATURE_EVENT_EXTENDED_OPCODE // otclient additional network opcodes Embaixo de uint32_t executePrepareDeath(Creature* creature, DeathList deathList); Adicione uint32_t executeExtendedOpcode(Creature* creature, uint8_t opcode, const std::string& buffer); creatureevent.cpp Embaixo de else if(tmpStr == "death")m_type = CREATURE_EVENT_DEATH; Adicione else if(tmpStr == "extendedopcode")m_type = CREATURE_EVENT_EXTENDED_OPCODE; Embaixo de case CREATURE_EVENT_DEATH:return "onDeath"; Adicione case CREATURE_EVENT_EXTENDED_OPCODE:return "onExtendedOpcode"; Embaixo de case CREATURE_EVENT_DEATH:return "cid, corpse, deathList"; Adicione case CREATURE_EVENT_EXTENDED_OPCODE:return "cid, opcode, buffer"; Embaixo de std::cout << "[Error - CreatureEvent::executeFollow] Call stack overflow." << std::endl;return 0;}} Adicione uint32_t CreatureEvent::executeExtendedOpcode(Creature* creature, uint8_t opcode, const std::string& buffer){//onExtendedOpcode(cid, opcode, buffer)if(m_interface->reserveEnv()){ScriptEnviroment* env = m_interface->getEnv();if(m_scripted == EVENT_SCRIPT_BUFFER){env->setRealPos(creature->getPosition());std::stringstream scriptstream;scriptstream << "local cid = " << env->addThing(creature) << std::endl;scriptstream << "local opcode = " << (int)opcode << std::endl;scriptstream << "local buffer = " << buffer.c_str() << std::endl;scriptstream << m_scriptData;bool result = true;if(m_interface->loadBuffer(scriptstream.str())){lua_State* L = m_interface->getState();result = m_interface->getGlobalBool(L, "_result", true);}m_interface->releaseEnv();return result;}else{#ifdef __DEBUG_LUASCRIPTS__char desc[35];sprintf(desc, "%s", player->getName().c_str());env->setEvent(desc);#endifenv->setScriptId(m_scriptId, m_interface);env->setRealPos(creature->getPosition());lua_State* L = m_interface->getState();m_interface->pushFunction(m_scriptId);lua_pushnumber(L, env->addThing(creature));lua_pushnumber(L, opcode);lua_pushlstring(L, buffer.c_str(), buffer.length());bool result = m_interface->callFunction(3);m_interface->releaseEnv();return result;}}else{std::cout << "[Error - CreatureEvent::executeRemoved] Call stack overflow." << std::endl;return 0;}} game.h Embaixo de int32_t getLightHour() {return lightHour;}void startDecay(Item* item); Adicione void parsePlayerExtendedOpcode(uint32_t playerId, uint8_t opcode, const std::string& buffer); game.cpp Embaixo de player->sendTextMessage(MSG_INFO_DESCR, buffer);} Adicione void Game::parsePlayerExtendedOpcode(uint32_t playerId, uint8_t opcode, const std::string& buffer){Player* player = getPlayerByID(playerId);if(!player || player->isRemoved())return;CreatureEventList extendedOpcodeEvents = player->getCreatureEvents(CREATURE_EVENT_EXTENDED_OPCODE);for(CreatureEventList::iterator it = extendedOpcodeEvents.begin(); it != extendedOpcodeEvents.end(); ++it)(*it)->executeExtendedOpcode(player, opcode, buffer);} /creaturescripts/creaturescrips.xml <event type="extendedopcode" name="ExtendedOpcode" event="script" value="extendedopcode.lua"/> /creaturescripts/extendedopcode.lua OPCODE_LANGUAGE = 1function onExtendedOpcode(cid, opcode, buffer)if opcode == OPCODE_LANGUAGE then-- otclient languageif buffer == 'en' or buffer == 'pt' then-- example, setting player language, because otclient is multi-language...--doCreatureSetStorage(cid, CREATURE_STORAGE_LANGUAGE, buffer)endelse-- other opcodes can be ignored, and the server will just work fine...endend Créditos : MaXwEllDeN 100% por adaptar o código
  19. Ola galera hoje trago para vocês um tutorial de como adicionar novas spells aos pokemons em um servidor 'PDA'... Tutorial feito a pedido do usuario: @josegremista Importante: Antes de começar gostaria de deixar claro que criar uma nova spell em um servidor de pokemon eh totalmente diferente que criar uma spell em um servidor de tibia, as spells de pokemon são criadas em lib/pokemon moves.lua e não na pasta spells como no tibia... A pasta spells vai simplismente 'chamar' as spells feitas na pasta lib. Vão em lib/pokemon moves.lua e achem isso.. Caso estejam usando meu servidor: --/////////////////////// PASSIVAS /////////////////////////--Caso usem outro tipo de 'PDA', vão ao final do script e achem isso: end return true end E entao adicionem um outro 'elseif'... elseif spell == "xxxx" thenOnde "xxxx" é o nome da nova spell... E então embaixo disso, criem o script da nova spell.. Exemplo: local pos = getThingPosWithDebug(cid) doMoveInArea2(cid, 91, inferno1, FIREDAMAGE, 0, 0, spell) addEvent(doDanoWithProtect, math.random(100, 400), cid, FIREDAMAGE, pos, inferno2, -min, -max, 0) Importante: Caso usem meu servidor, aconcelho a olharem o arquivo lib/newStatusSyst.lua, la estão todas as funções de dano do servidor... Importante: Não coloquem areas de spells nesse arquivo! As areas de spells devem ser colocadas em lib/areas.lua, para deixar o outro script mais organizado... Depois de criado o script da spell, vão em lib/configuration.lua e achem a tabela movestable, e então adicionem a nova spell nos pokes q vocês quiserem... No meu 'PDA' usem: move1 = {name = "xxxx", level = aa, cd = bb, dist = cc, target = dd, f = ee, t = "yyyy"},Onde: "xxxx" = nome da spell, aa = level que o poke/player precisa ter para usar a spell, bb = cd, tempo de espera, para usar a spell denovo, cc = distância minima que o poke tem q tar pra usar a spell, dd = coloquem 1, caso precise ter um target pra usar a spell, ou coloquem 0, caso não precise de target pra usar a spell, ee = esse é o 'dano' da spell, esse valor vai ser usado na formula final de dano de cada spell -caso seja uma spell que não tem dano coloquem 0-, "yyyy" = é o 'tipo' da spell -"grass", "water", "fire"...- Caso usem outro tipo de 'PDA' usem: move1 = {name = "xxxx", level = aa, cd = bb, dist = cc, target = dd},Onde: "xxxx" = nome da spell, aa = level que o poke/player precisa ter para usar a spell, bb = cd, tempo de espera, para usar a spell denovo, cc = distância minima que o pokemon tem que tar pra usar a spell, dd = coloquem 1, caso precise ter um target pra usar a spell, ou coloquem 0, caso nao precise de target pra usar a spell Importante: caso usem outro tipo de 'PDA' o dano e o 'tipo' da spell ficam em lib/moves.lua... ["xxxx"] = {f = aa, t = "yyyy"}, Onde: "xxxx" = nome da spell, aa = esse é o 'dano' da spell, esse valor vai ser usado na formula final de dano de cada skill -caso seja uma skill que n]ao tem dano coloquem 0-, "yyyy" = é o tipo da spell -"grass", "water", "fire"... Depois de feito isso, vão em spells/ps/ e copiem algum arquivo la e mudem o nome para o nome da sua nova spell e depois abram esse arquivo e mudem isso: docastspell(cid, "xxxx")Onde "xxxx" é o nome da spell... Depois abram o arquivo spells/spells.xml e adicionem uma nova linha... <instant name="xxxx" words="yyyy" lvl="1000" mana="0" event="script" value="ps/xxxx.lua"></instant>Onde: "xxxx" = nome da nova spell, "yyyy" = vocês colocam "spellYYY" onde "YYY" eh o proximo numero em sequencia, olhem a ultima spell adicionada q vocês vão intender... E por ultimo, vão em monster/pokes/ e adicionem a spell nos pokemons que vocês quiserem... <attack name="xxxx" interval="yyyy" chance="zzzz" range="aaaa"/>Onde: "xxxx" = nome da spell, "yyyy" = de quanto em quantos, milésimos de segundos -1s = 1000-, o pokemon tentara usar a spell, "zzzz" = a chance do pokemon conseguir usar a spell, "aaaa" = distância minima pro pokemon começar a usar a spell Pronto, espero q vocês gostem do tutorial. Qualquer erro ou se faltou alguma coisa me avisem para eu editar o post ^^
  20. Olá galera, sou o SHUTUP, hoje vim aqui ajudar vocês com esse tutorial. Eu vou estar ensinando a executar "QUERYS" em sua Mysql. 1- Oque é isso? R: é um comando que executa na sua sql para consultar os dados e modificar aquilo que você determinou. Exemplo: Vou mudar o level de todos os players do servidor para level 8: UPDATE `players` SET `level` = '8' Então vamos lá! 1) Acesse seu phpmyadmin pelo: localhost/phpmyadmin 2) Selecione sua database. (Nesse caso minha database se chama "database". 3) Vá ao botão acima da página: "SQL": CLIQUE NELA, irá aparecer assim: 4) Nele você escreve os códigos correspondentes á açao que voce quer faser. Principais comandos Mysql: Ps: Sempre que for fazer uma mudança em seu banco de dados, previna-se, faça seu backup e salve-o em um pen-drive / HD. Resetar Levels / Mana / HP / ML: UPDATE `players` SET `level` = '8', `health` = '180', `healthmax` = '180', `experience` = '4200', `mana` = '35', `manamax` = '35', `cap` = '400' Resetar Skills: UPDATE `players_skills` SET `value` = '10' Resetar FRAGS de todos os players do Servidor: UPDATE `players` SET `redskulltime`=0; Esse comando não vai tirar as skulls dos jogadores. Remover as SKULLS de todos os jogadores: UPDATE `players` SET `Skull`=0; Deletar todos os items de um único jogador: Obs: "1234" é o id do jogador que terá todos seus items do depot e corpo APAGADOS. DELETE FROM `player_depotitems` , `player_items` WHERE `player_id` = '1234' Mandar todos jogadores para uma certa posição do mapa: OBS: Mudar X, Y, Z Pelas posições correspondentes. UPDATE players SET posx = X, posy = Y, posz = Z; Remover premium account de todos os players: UPDATE account SET premdays=0; Dar premium para os players: (+ 7 é o número de dias que vai dar, você pode alterar o valor como quiser.) UPDATE accounts SET premdays = premdays + 7 Dar Todas as blesses para todos os players: UPDATE `players` SET `blessings`=31; Deletar houses de players que não existem mais: UPDATE `houses` SET `owner` = '0' WHERE `houses`.`owner` NOT IN ( SELECT `players`.`id` FROM `players` WHERE `players`.`id` = `houses`.`owner` ); Deletar todos os items de um player que foi deletado: DELETE FROM player_items WHERE player_id NOT IN (SELECT id FROM players); Remover todos os items de um certo ID dos DEPOTS: DELETE FROM player_depotitems tile_items WHERE itemtype = 2160; Remover todos os items de um certo ID do CORPO DOS PLAYERS: DELETE FROM player_items WHERE itemtype = 2160; Remover todos os items de um certo ID das HOUSES DELETE FROM tile_items WHERE itemtype = 2160; Deletar todos os players Menor que level 50: DELETE FROM players WHERE level < 50 AND lastlogin < UNIX_TIMESTAMP() - 20*24*60*60 Necessita Fazer um Backup dos Samples, pois irão com certeza excluir os samples. Importar todos os Samples em caso de algum de acidente: Account manager original da TFS: _______________________________________________ Créditos: 100% Meus. Espero que esse tutorial ajude muita gente, Qualquer dúvida poste abaixo. Darei suporte a todos deste tópico. Atenciosamente: Shutup
  21. 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
  22. Creditos: Vodkart Kydrai fala galerinha resolvi posta alguns script que acontece quando o player mata algum monstro ... o primeiro é o script que acontece quando voce mata um Monstro abre o teleport. o segundo é matar o monstro e sumir a parede por algum tempo. Obs: o Nome do monstro deve ser colocado com Letra Maiuscula. [ Matar monstro e abrir Teleport ] creaturescript\script [ Matar Monstro e parede sumir por determinado tempo ] creaturescript\script [ Matar Monstro e ser teleportado ] [ Matar Monstro e Ganhar Storage ]
  23. Bem, estava fuçando o LUA_FUNCTIONS e vi la uns negocim interessante e resolvir fazer um script legal com o que vi.. Basicamente e um item que quando usado, dara uma certa quandidade de EXP ao jogador. Muito simples de se fazer e de se configurar... Vamos la: Primeiramente crie um arquivo chamado scroll.lua dentro da pasta data/actions/scripts e coloque isso dentro dele: Agora pra finalizar, abra o actions.xml e adicione esta linha ate ele: Pronto, agora dentro do jogo crie o item 6119 e tente usar-lo para ver o que que acontece =] Dica: -Vale lembrar que o item pode ser mudado, basta voce trocar o ItemID no scroll.lua e no actions.xml -Outra dica boa, é você colocar esse script em uma quest, e colocar para apenas para os player sem vocaçao que no caso seria a vocation 0 poderem usar...Deixa o server mais original :wink: Créditos: 100% AlissonLinneker
  24. Vou ensinar um modo facil e rapido de colocar algumas outfits só para jogadores vip... Primeiro vá até Data\data\XML\outfits.xml Lá dentro escolha a outfit que você quer colocar(podera ser varias outfitis) só para jogadores vip e adicione: quest="XXXX" XXXX = numero de uma storage qualquer Exemplo Meu: <outfit id="32" premium="yes" quest="11322"> <list gender="0-3" lookType="264" name="Brutetamer"/> </outfit> obs: caso tenha alguma como acess"3" remova essa parte no meu caso a outfit foi Brutetamer e storage escolhida foi 11322,vamos usar essa mesmo storage depois... agora vamos para o script: [ Outfit Vip para o Perfect Vip System ] : [ Outfit vip o Vip System By Account V1.0 ] : [ Outfit vip para o System By MOCK] :