Ir para conteúdo

ManoTobira

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    ManoTobira recebeu reputação de bamb00 em [action] Edo Tensei   
    primeiro crie os monstros de edo tensei
     
    em actions copie um arquivo e renomeie para edocatch
     
    apague tudo oq tem nele e cole isso
     
    primeiro crie os monstros de edo tensei
     
    em actions copie um arquivo e renomeie para edocatch
     
    apague tudo oq tem nele e cole isso
     
    local mtrs = {                   ["[Edo Tensei] Madara] = {hp = 50000, maxhp = 50000, corpse = 2936, chance = 100},                 ["[Edo Tensei] Sasuke] = {hp = 50000, maxhp = 50000, corpse = 2806, chance = 100},                 ["[Edo Tensei] Deidara] = {hp = 50000, maxhp = 50000, corpse = 2879, chance = 100}, } local vocs = {300, 649} local corpos = {2936, 2806, 2879}   function onUse(cid, item, frompos, item2, topos) if(not(isInArray(vocs, getPlayerVocation(cid)))) then return doPlayerSendTextMessage(cid, 26, "You cannot use this object.") end if(not(isInArray(corpos, item2.itemid))) then doPlayerPopupFYI(cid, "Para usar o Edo Tensei você deve usar o pergaminho em algum corpo de um jogador.") return true end                 for pet_name, v in pairs(mtrs) do                                 if item2.itemid == v.corpse then                                         if math.random(0,100) <= v.chance then doSendMagicEffect(topos, 2)                                                 doPlayerSendTextMessage(cid, 27, "".. pet_name .. " foi selado nesse pergaminho.")                                                 doRemoveItem(item2.uid, 1)                                                 doRemoveItem(item.uid, 1)                                                 local itemcatch = doPlayerAddItem(cid, 11390, 1)                                                 doItemSetAttribute(itemcatch, "namepet", pet_name)                                                 doItemSetAttribute(itemcatch, "description", "Neste pergaminho foi selado um ".. pet_name ..".")                                                 doItemSetAttribute(itemcatch, "lifepet", v.hp)                                                 doItemSetAttribute(itemcatch, "maxlifepet", v.maxhp)                                         else                                                 doPlayerSendTextMessage(cid, 27, "Falhou.")                                         end                                 end                 end                 return true end  
         Configuração
    azul=nome do monster
    verde=hp que o monster vai nasce
    azul fraco=id do monster morto
    rosa=chance de selar o corpo
    amarelo=vocaçoes para usar o edo tensei
    vermelho=id do item que solta o edo tensei
     
    agora copie outro arquivo e renomeie para edogo
     
    apague tudo oq tem dentro e cole isso
     
    local config = { percent = 15, --- porcentagem do chakra que perde }   function onUse(cid, item, frompos, item2, topos)     local health = tonumber(getItemAttribute(item.uid, "lifepet"))     local mhp = tonumber(getItemAttribute(item.uid, "maxlifepet")) local lifedraw = math.ceil(getCreatureMaxHealth(cid) * (config.percent)/100) local vocs = {300, 649} local msg0 = [[ Você ssó pode ter 0 summon(s), A seguinte tabela mostra os leveis e o respectivo número de summons que um player terá ao estar nele   Level <~> [summons]   ~->50[1] ~->150[2] ~->200[2] ~->350[3] ~->450[4] ]]   local msg1 = [[ Você ssó pode ter 1 summon(s), A seguinte tabela mostra os leveis e o respectivo número de summons que um player terá ao estar nele   Level <~> [summons]   ~->50[1] ~->150[2] ~->200[2] ~->350[3] ~->450[4] ]]   local msg2 = [[ Você ssó pode ter 2 summon(s), A seguinte tabela mostra os leveis e o respectivo número de summons que um player terá ao estar nele   Level <~> [summons]   ~->50[1] ~->150[2] ~->200[2] ~->350[3] ~->450[4] ]]   local msg3 = [[ Você ssó pode ter 3 summon(s), A seguinte tabela mostra os leveis e o respectivo número de summons que um player terá ao estar nele   Level <~> [summons]   ~->50[1] ~->150[2] ~->200[2] ~->350[3] ~->450[4] ]]   local msg4 = [[ Você ssó pode ter 4 summon(s), A seguinte tabela mostra os leveis e o respectivo número de summons que um player terá ao estar nele   Level <~> [summons]   ~->50[1] ~->150[2] ~->200[2] ~->350[3] ~->450[4] ]]   if(not(isInArray(vocs, getPlayerVocation(cid)))) then return doPlayerSendTextMessage(cid, 26, "You cannot use this object.") end   if health <= 0 then return doPlayerSendCancel(cid, "Esse pet esta morto.") end     if #getCreatureSummons(cid) == 0 and getPlayerLevel(cid) <= 49 then doPlayerPopupFYI(cid, msg0)     return true end   if #getCreatureSummons(cid) == 1 and getPlayerLevel(cid) <= 149 then doPlayerPopupFYI(cid, msg1)     return true end   if #getCreatureSummons(cid) == 1 and getPlayerLevel(cid) <= 199 then doPlayerPopupFYI(cid, msg1)     return true end   if #getCreatureSummons(cid) == 2 and getPlayerLevel(cid) <= 349 then doPlayerPopupFYI(cid, msg2)     return true end   if #getCreatureSummons(cid) == 3 and getPlayerLevel(cid) <= 449 then doPlayerPopupFYI(cid, msg3)     return true end   if #getCreatureSummons(cid) == 4 and getPlayerLevel(cid) >= 450 then doPlayerPopupFYI(cid, msg4)     return true end       local pet_name = getItemAttribute(item.uid, "namepet")   if item.itemid == 11390 then if not getTilePzInfo(getPlayerPosition(cid)) then if #getCreatureSummons(cid) < 1 and getPlayerLevel(cid) > 49 or #getCreatureSummons(cid) < 2 and getPlayerLevel(cid) > 149 or #getCreatureSummons(cid) < 2 and getPlayerLevel(cid) > 199 or #getCreatureSummons(cid) < 3 and getPlayerLevel(cid) > 349 or #getCreatureSummons(cid) < 4 and getPlayerLevel(cid) > 449 then if isCreature(cid) then if getCreatureMaxHealth(cid) then   local summon = doSummonCreature(pet_name, topos) doRemoveItem(item.uid, 1)                 doConvinceCreature(cid, summon)                 setCreatureMaxHealth(summon, mhp)                 doCreatureAddHealth(summon, mhp)                 doCreatureAddHealth(summon, health - mhp) doCreatureAddHealth(cid, -5000) doCreatureAddMana(cid, -5103)                 doSendMagicEffect(getCreaturePosition(summon), 2)                 doCreatureSay(cid, "EDO TENSEI!", 19) end else doPlayerSendCancel(cid,'Você não pode invocar uma criatura de uma zona protegida.') end     end end end     return true end        Configuração
    local msg=tabela do edo tensei e nessa parte getCreatureSummons(cid) < 1 é a quantidade de summon e nessa getPlayerLevel(cid) > 49 é o level pra usa no caso é 50 porque tem que colocar 1 a menos
     
    agora abra actions.xml e adicione
     
    <!-- Edo Tensei --> <action itemid="11389" event="script" value="edocatch.lua"/> <action itemid="11390" event="script" value="edogo.lua"/>        Configuração azul=id do item que captura o edo tensei vermelho=id do item que solta o edo tensei     Créditos   BananaFight LuckOake MaXwElldEn Gears PsyMcKenzie   por terem criado o pet system que usei de base
  2. Gostei
    ManoTobira deu reputação a Orochi Elf em Perfect Tv System - OrochiElf   
    Perfect Tv System
    autor: Tony Araújo (OrochiElf)
     
    Olá pessoal, hoje eu vim mostrar para vocês o meu novo sistema de TV. Sim, isso mesmo, um sistema de televisão completo. Bom, como a maioria sabe, nenhum sistema de televisão disponível foi desenvolvido da "maneira correta".
     
    - Mas como assim, "maneira correta"?
     
    Sem utilizar a tecnica milenar chamada "GAMBIARRA", e a mais famosa delas é o auto teleport by step, ele consiste em teletransportar o telespectador toda vez em que o transmissor der um passo, ou seja, se tiver um canal com 100 pessoas assistindo, e o jogador estiver uma velocidade consideravel (ex: 2-4 passos por segundo), o que seria (120 - 240) passos por minuto, o que levaria então a (1200 - 2400) passos por minuto, por conta de todos os jogadores assistindo. Imaginem só a CPU gritando, é o que acontece, e então milhares de problemas acontecem, quedas por alto consumo da CPU, mass kicks, enfim, este sistema que estou mostrando a vocês foi desenvolvido utilizando a mesma técnica que o SvkE / PxG. É denominado de (compartilhamento de dados), consiste enviar os mesmos pacotes para todos os que estão dentro de uma certa lista / tabela. É simples entender a tecnica, pense o seguinte, quando o jogador vai dar um passo para algum lado, o servidor precisa enviar todas as informações de mapa, criaturas, items que estão na nova posição (que seriam os dados), e esse sistema envia os mesmos dados para todos os jogadores que estão assistindo, fazendo assim, atualizar a tela de todos telespectadores com as imagens do local do transmissor. 
     
    Espero que gostem
    Obs: Como está escrito no vídeo (Vídeo não oficial), não é a versão final do vídeo, porque eu gravei de ultima hora e a qualidade não ficou boa, as travadas é por conta do meu computador, tinham algumas coisas abertas kkkk (PC lixo é assim mesmo).
  3. Gostei
    ManoTobira recebeu reputação de thelifeofpbion em (Resolvido)Alanvanca tp   
    É mesmo eu errei kkkkkkk
  4. Gostei
    ManoTobira recebeu reputação de thelifeofpbion em (Resolvido)Alanvanca tp   
    Não testei
     
    local config = {
        tpos = {x=885, y=1460, z=5}, -- Posição para onde o player será teleportado.
    }
     
    function onUse(cid, item, frompos, item2, topos)
        if isCreature(cid) then
            doTeleportThing(cid, config.tpos)
            doPlayerSendTextMessage(cid,20,"You have been teleported.") -- Menssagem que aparecerá para o player ao ser teleportado.
        end
    return true
    end
     
     /\ Acredito que funcione agora /\
  5. Gostei
    ManoTobira deu reputação a Rusherzin em [Function] Converter tempo   
    Bom, eu estava cansado de ficar fazendo os cálculos para exibir as horas, minutos ou segundos quando faço algum script com cooldown. Então, eu criei essa função simples que converte o valor em segundos para hora, minuto e segundo.

     
          Exemplos:
    convertTime(60) retornará "1 minuto"
    convertTime(61) retornará "1 minuto e 1 segundo"
    convertTime(3600) retornará "1 hora"
    convertTime(3601) retornará "1 hora e 1 segundo"
    convertTime(3661) retornará "1 hora, 1 minuto e 1 segundo"

    E como eu sou babaca perfeccionista, o português também vem correto. Enfim, aqui está a função.
     
    function convertTime(a) if(type(tonumber(a)) == "number" and a > 0) then if (a <= 3599) then local minute = math.floor(a/60) local second = a - (60 * minute) if(second == 0) then return ((minute)..((minute > 1) and " minutos" or " minuto")) else return ((minute ~= 0) and ((minute>1) and minute.." minutos e " or minute.." minuto e ").. ((second>1) and second.." segundos" or second.." segundo") or ((second>1) and second.." segundos" or second.. " segundo")) end else local hour = math.floor(a/3600) local minute = math.floor((a - (hour * 3600))/60) local second = (a - (3600 * hour) - (minute * 60)) if (minute == 0 and second > 0) then return (hour..((hour > 1) and " horas e " or " hora e "))..(second..((second > 1) and " segundos" or " segundo")) elseif (second == 0 and minute > 0) then return (hour..((hour > 1) and " horas e " or " hora e "))..(minute..((minute > 1) and " minutos" or " minuto")) elseif (second == 0 and minute == 0) then return (hour..((hour > 1) and " horas" or " hora")) end return (hour..((hour > 1) and " horas, " or " hora, "))..(minute..((minute > 1) and " minutos e " or " minuto e "))..(second..((second > 1) and " segundos" or " segundo")) end end end Obs: se der algum bug com algum número, é só postar, não testei todas possibilidades (obviamente).
    Por fim, sei que fazer o horário no formato 00:00:00 ou retornar o valor de horas, minutos e segundos separadamente me pouparia metade do trabalho e, no segundo caso, deixaria mais fácil para controlar os dados, mas eu queria que viesse nesse formato mesmo. Anyway, espero que seja útil e poupe o trabalho de alguém.
  6. Gostei
    ManoTobira recebeu reputação de FabiiioH em [Action] Hiraishin Kunai   
    Esse sistema é o da hiraishin kunai uma kunai que teleporta para position que voce escolhe vamos lá
     
    Em Actions/Scripts/ Copie um Arquivo.lua e renomeie para hiraishin apague tudo e coloque a seguinte script:
     



     
    em Actions.xml Adicione a seguinte tag:
    <action itemid="7382" event="script" value="hiraishin.lua" allowfaruse="1"/> explicando
     
    local vocs = {250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261} --- aqui é o id das voc que pode usar a kunai
     
    local parede = {1030, 1029, 1025, 1026, 1027, 1259, 1028, 1032, 1034, 1033, 1536, 1533, 873, 919, 874, 1037, 4472, 4475, 4471, 3388, 3373, 3363, 3398, 3408, 3417, 3420, 3407, 3368, 2701, 5130, 6170, 6166, 1596}
    são as parede que não podem passar  etc...
     

     
    Créditos
    Luan Mello
  7. Gostei
    ManoTobira recebeu reputação de Gustavo Ntos em [action] Edo Tensei   
    primeiro crie os monstros de edo tensei
     
    em actions copie um arquivo e renomeie para edocatch
     
    apague tudo oq tem nele e cole isso
     
    primeiro crie os monstros de edo tensei
     
    em actions copie um arquivo e renomeie para edocatch
     
    apague tudo oq tem nele e cole isso
     
    local mtrs = {                   ["[Edo Tensei] Madara] = {hp = 50000, maxhp = 50000, corpse = 2936, chance = 100},                 ["[Edo Tensei] Sasuke] = {hp = 50000, maxhp = 50000, corpse = 2806, chance = 100},                 ["[Edo Tensei] Deidara] = {hp = 50000, maxhp = 50000, corpse = 2879, chance = 100}, } local vocs = {300, 649} local corpos = {2936, 2806, 2879}   function onUse(cid, item, frompos, item2, topos) if(not(isInArray(vocs, getPlayerVocation(cid)))) then return doPlayerSendTextMessage(cid, 26, "You cannot use this object.") end if(not(isInArray(corpos, item2.itemid))) then doPlayerPopupFYI(cid, "Para usar o Edo Tensei você deve usar o pergaminho em algum corpo de um jogador.") return true end                 for pet_name, v in pairs(mtrs) do                                 if item2.itemid == v.corpse then                                         if math.random(0,100) <= v.chance then doSendMagicEffect(topos, 2)                                                 doPlayerSendTextMessage(cid, 27, "".. pet_name .. " foi selado nesse pergaminho.")                                                 doRemoveItem(item2.uid, 1)                                                 doRemoveItem(item.uid, 1)                                                 local itemcatch = doPlayerAddItem(cid, 11390, 1)                                                 doItemSetAttribute(itemcatch, "namepet", pet_name)                                                 doItemSetAttribute(itemcatch, "description", "Neste pergaminho foi selado um ".. pet_name ..".")                                                 doItemSetAttribute(itemcatch, "lifepet", v.hp)                                                 doItemSetAttribute(itemcatch, "maxlifepet", v.maxhp)                                         else                                                 doPlayerSendTextMessage(cid, 27, "Falhou.")                                         end                                 end                 end                 return true end  
         Configuração
    azul=nome do monster
    verde=hp que o monster vai nasce
    azul fraco=id do monster morto
    rosa=chance de selar o corpo
    amarelo=vocaçoes para usar o edo tensei
    vermelho=id do item que solta o edo tensei
     
    agora copie outro arquivo e renomeie para edogo
     
    apague tudo oq tem dentro e cole isso
     
    local config = { percent = 15, --- porcentagem do chakra que perde }   function onUse(cid, item, frompos, item2, topos)     local health = tonumber(getItemAttribute(item.uid, "lifepet"))     local mhp = tonumber(getItemAttribute(item.uid, "maxlifepet")) local lifedraw = math.ceil(getCreatureMaxHealth(cid) * (config.percent)/100) local vocs = {300, 649} local msg0 = [[ Você ssó pode ter 0 summon(s), A seguinte tabela mostra os leveis e o respectivo número de summons que um player terá ao estar nele   Level <~> [summons]   ~->50[1] ~->150[2] ~->200[2] ~->350[3] ~->450[4] ]]   local msg1 = [[ Você ssó pode ter 1 summon(s), A seguinte tabela mostra os leveis e o respectivo número de summons que um player terá ao estar nele   Level <~> [summons]   ~->50[1] ~->150[2] ~->200[2] ~->350[3] ~->450[4] ]]   local msg2 = [[ Você ssó pode ter 2 summon(s), A seguinte tabela mostra os leveis e o respectivo número de summons que um player terá ao estar nele   Level <~> [summons]   ~->50[1] ~->150[2] ~->200[2] ~->350[3] ~->450[4] ]]   local msg3 = [[ Você ssó pode ter 3 summon(s), A seguinte tabela mostra os leveis e o respectivo número de summons que um player terá ao estar nele   Level <~> [summons]   ~->50[1] ~->150[2] ~->200[2] ~->350[3] ~->450[4] ]]   local msg4 = [[ Você ssó pode ter 4 summon(s), A seguinte tabela mostra os leveis e o respectivo número de summons que um player terá ao estar nele   Level <~> [summons]   ~->50[1] ~->150[2] ~->200[2] ~->350[3] ~->450[4] ]]   if(not(isInArray(vocs, getPlayerVocation(cid)))) then return doPlayerSendTextMessage(cid, 26, "You cannot use this object.") end   if health <= 0 then return doPlayerSendCancel(cid, "Esse pet esta morto.") end     if #getCreatureSummons(cid) == 0 and getPlayerLevel(cid) <= 49 then doPlayerPopupFYI(cid, msg0)     return true end   if #getCreatureSummons(cid) == 1 and getPlayerLevel(cid) <= 149 then doPlayerPopupFYI(cid, msg1)     return true end   if #getCreatureSummons(cid) == 1 and getPlayerLevel(cid) <= 199 then doPlayerPopupFYI(cid, msg1)     return true end   if #getCreatureSummons(cid) == 2 and getPlayerLevel(cid) <= 349 then doPlayerPopupFYI(cid, msg2)     return true end   if #getCreatureSummons(cid) == 3 and getPlayerLevel(cid) <= 449 then doPlayerPopupFYI(cid, msg3)     return true end   if #getCreatureSummons(cid) == 4 and getPlayerLevel(cid) >= 450 then doPlayerPopupFYI(cid, msg4)     return true end       local pet_name = getItemAttribute(item.uid, "namepet")   if item.itemid == 11390 then if not getTilePzInfo(getPlayerPosition(cid)) then if #getCreatureSummons(cid) < 1 and getPlayerLevel(cid) > 49 or #getCreatureSummons(cid) < 2 and getPlayerLevel(cid) > 149 or #getCreatureSummons(cid) < 2 and getPlayerLevel(cid) > 199 or #getCreatureSummons(cid) < 3 and getPlayerLevel(cid) > 349 or #getCreatureSummons(cid) < 4 and getPlayerLevel(cid) > 449 then if isCreature(cid) then if getCreatureMaxHealth(cid) then   local summon = doSummonCreature(pet_name, topos) doRemoveItem(item.uid, 1)                 doConvinceCreature(cid, summon)                 setCreatureMaxHealth(summon, mhp)                 doCreatureAddHealth(summon, mhp)                 doCreatureAddHealth(summon, health - mhp) doCreatureAddHealth(cid, -5000) doCreatureAddMana(cid, -5103)                 doSendMagicEffect(getCreaturePosition(summon), 2)                 doCreatureSay(cid, "EDO TENSEI!", 19) end else doPlayerSendCancel(cid,'Você não pode invocar uma criatura de uma zona protegida.') end     end end end     return true end        Configuração
    local msg=tabela do edo tensei e nessa parte getCreatureSummons(cid) < 1 é a quantidade de summon e nessa getPlayerLevel(cid) > 49 é o level pra usa no caso é 50 porque tem que colocar 1 a menos
     
    agora abra actions.xml e adicione
     
    <!-- Edo Tensei --> <action itemid="11389" event="script" value="edocatch.lua"/> <action itemid="11390" event="script" value="edogo.lua"/>        Configuração azul=id do item que captura o edo tensei vermelho=id do item que solta o edo tensei     Créditos   BananaFight LuckOake MaXwElldEn Gears PsyMcKenzie   por terem criado o pet system que usei de base
  8. Gostei
    ManoTobira recebeu reputação de KotZletY em [Action] Hiraishin Kunai   
    Fiz essa versão diferente que pode ser útil pois onde você colocava o id da vocation você coloca o nome agora
     
    function onUse(cid, item, fromPosition, itemEx, toPosition)
     
    local pos = fromPosition
    local aqui = getPlayerPosition(cid)
    local vocs = {"Minato", "Tobirama"}
    local agua = {4610, 4612, 4611, 4664, 4613, 4666, 4646, 4654, 4609, 4665, 4608, 4625, 4665, 4666, 4645}
    local parede = {1030, 1029, 1025, 1026, 1027, 1259, 1028, 1032, 1034, 1033, 1536, 1533, 873, 919, 874, 1037, 2700, 2708, 4472, 4475, 4471, 3388, 3373, 3363, 3398, 3408, 3417, 3420, 3407, 3368, 2701, 5130, 6170, 6166, 1596, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422}
    local pedra = {874, 919, 873, 2707, 2784, 2778, 3330, 4471, 4475, 4473, 4472, 4474, 4468, 4478, 4469, 4470, 4479, 2703, 2704, 1534, 2739, 3867, 5324, 5316, 5315, 5317, 1600, 1597, 1601}
     
    if getDistanceBetween(aqui, toPosition) >= 8 then
    return doPlayerSendTextMessage(cid, 27, "Está muito longe.")
     
    elseif(not(isSightClear(aqui, toPosition, 1))) then
    return doPlayerSendTextMessage(cid, 27, "Isso é impossivel.")
     
    elseif(getTilePzInfo(aqui)) then
    return doPlayerSendCancel(cid, "Não pode usar a tecnica Deus Dragão em casas ou areas protegidas.")
     
    elseif(getTilePzInfo(toPosition)) then
    return doPlayerSendCancel(cid, "Não pode usar a tecnica Deus Dragão em casas ou areas protegidas.")
     
    elseif(isInArray(agua, itemEx.itemid)) then
    return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em agua")
     
    elseif(isInArray(parede, itemEx.itemid)) then
    return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em paredes")
     
    elseif(isInArray(pedra, itemEx.itemid)) then
    return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em pedras")
     
    elseif(not(isInArray(vocs, getPlayerVocationName(cid)))) then
    return doPlayerSendTextMessage(cid, 27, "Desculpe, Você não pode usar a tecnica Deus Dragão.")
    end
     
    if(doTeleportThing(cid, toPosition, false)) then
    doSendMagicEffect(pos, 24)
    doSendMagicEffect(toPosition, 24)
     
    doCreatureSay(cid, "Shunshin", 19)
    return doSendDistanceShoot(pos, toPosition, 16)
    end
     
    return doPlayerSendCancel(cid, "Desculpe nao foi possivel.")
    end
  9. Gostei
    ManoTobira recebeu reputação de AllanSilva em SPELL - Hiraishin Jutsu Seal   
    cara eu tenho 1 aki sem tempo pra kunai sumir pq quando eu fiz eu n sabia se tinha tempo ou nao pra sumir
     
    Hiraishin Seal:
     
    local s = {5668,5669,5667} local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) function x(p, d) local t = {{x=p.x,y=p.y-1,z=p.z},{x=p.x+1,y=p.y,z=p.z},{x=p.x,y=p.y+1,z=p.z},{x=p.x-1,y=p.y,z=p.z}} return t[d+1] end function onCastSpell(cid, var) local position1 = {x=getPlayerPosition(cid).x+1, y=getPlayerPosition(cid).y+1, z=getPlayerPosition(cid).z} local pos = getCreaturePosition(cid) local item = 2335 --id da kunai doCreateItem(item, getCreaturePosition(cid)) local mystr = "return {x=xx,y=yy,z=zz}" local mystr = string.gsub(mystr, "xx", pos.x) local mystr = string.gsub(mystr, "yy", pos.y) local mystr = string.gsub(mystr, "zz", pos.z) local position112 = {x=getPlayerPosition(cid).x, y=getPlayerPosition(cid).y, z=getPlayerPosition(cid).z} setPlayerStorageValue(cid, s[1], mystr) setPlayerStorageValue(cid, s[2], os.time()+0) setPlayerStorageValue(cid, s[3], 1) for i = 1, 5 do end doCombat(cid, combat, var) return true end   Hiraishin no Jutsu:   local s = {5668,5669,5667} function onCastSpell(cid, var) local parameters = { cid = cid, var = var} k = getPlayerStorageValue(cid, s[2]) - os.time() if k <= 0 then t = loadstring(getPlayerStorageValue(cid, s[1]))() local position1 = {x=getPlayerPosition(cid).x+1, y=getPlayerPosition(cid).y+1, z=getPlayerPosition(cid).z} local position2 = {x=t.x+1, y=t.y+1, z=t.z} doTeleportThing(cid, t) doSendMagicEffect(position1, 82) addEvent(doSendMagicEffect, 0, position2,186) addEvent(doSendMagicEffect, 500, t, 131) setPlayerStorageValue(cid, s[3], -1) else doPlayerSendTextMessage(cid, 19, "Aguarde "..k.." segundos.") end return true end  
    se ajudei +rep
  10. Gostei
    ManoTobira recebeu reputação de Zauster em (Resolvido)[pedido] spell izanagi   
    vlw era isso mesmo fiz uma spell pra ativar a script
     
     
    local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, 108) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, true)   function onCastSpell(cid, var) local target = getCreatureTarget(cid) local waittime1 = 180 -- Tempo de exhaustion local storage1 = 115819   if exhaustion.check(cid, storage1) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde " .. exhaustion.get(cid, storage1) .. " segundos para usar a spell novamente.") return false end   doPlayerSetStorageValue(cid, 19332, 1) doPlayerSendTextMessage(cid, 27, "Seu izanagi tem 20 segundos de efeito.") addEvent(doPlayerSetStorageValue, 20000, cid, 19332, 0) addEvent(doPlayerSendTextMessage, 20000, cid, 27, "Seu izanagi perdeu o efeito.") exhaustion.set(cid, storage1, waittime1) return true end
  11. Gostei
    ManoTobira recebeu reputação de Matheus Reis em [Pedido] Hiraishin Kunai   
    vai em actions/scripts e copie um arquivo e renomeie para hirashin e cole isso nele:
     
    function onUse(cid, item, fromPosition, itemEx, toPosition)   local pos = fromPosition local aqui = getPlayerPosition(cid) local vocs = {300, 301, 302, 303, 304, 305, 306, 307} local agua = {4610, 4612, 4611, 4664, 4613, 4666, 4646, 4654, 4609, 4665, 4608, 4625, 4665, 4666, 4645} local parede = {1030, 1029, 1025, 1026, 1027, 1259, 1028, 1032, 1034, 1033, 1536, 1533, 873, 919, 874, 1037, 2700, 2708, 4472, 4475, 4471, 3388, 3373, 3363, 3398, 3408, 3417, 3420, 3407, 3368, 2701, 5130, 6170, 6166, 1596, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422} local pedra = {874, 919, 873, 2707, 2784, 2778, 3330, 4471, 4475, 4473, 4472, 4474, 4468, 4478, 4469, 4470, 4479, 2703, 2704, 1534, 2739, 3867, 5324, 5316, 5315, 5317, 1600, 1597, 1601}   if getDistanceBetween(aqui, toPosition) >= 8 then return doPlayerSendTextMessage(cid, 27, "Está muito longe.")   elseif(not(isSightClear(aqui, toPosition, 1))) then return doPlayerSendTextMessage(cid, 27, "Isso é impossivel.")   elseif(getTilePzInfo(aqui)) then return doPlayerSendCancel(cid, "Não pode usar a tecnica Deus Dragão em casas ou areas protegidas.")   elseif(getTilePzInfo(toPosition)) then return doPlayerSendCancel(cid, "Não pode usar a tecnica Deus Dragão em casas ou areas protegidas.")   elseif(isInArray(agua, itemEx.itemid)) then return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em agua")   elseif(isInArray(parede, itemEx.itemid)) then return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em paredes")   elseif(isInArray(pedra, itemEx.itemid)) then return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em pedras")   elseif(not(isInArray(vocs, getPlayerVocation(cid)))) then return doPlayerSendTextMessage(cid, 27, "Desculpe, Apenas Minato pode usar a tecnica Deus Dragão.") end   if(doTeleportThing(cid, toPosition, false)) then doSendMagicEffect(pos, 24) doSendMagicEffect(toPosition, 24)   doCreatureSay(cid, "Shunshin", 19) return doSendDistanceShoot(pos, toPosition, 16) end   return doPlayerSendCancel(cid, "Desculpe nao foi possivel.") end     agora em actions.xml vcs add:   <action itemid="7382" event="script" value="hiraishin.lua" allowfaruse="1"/>
  12. Gostei
    se me lembro bem é isso
     
    isMonster(getCreatureTarget(cid)) -- se for monstro o alvo
    isPlayer(getCreatureTarget(cid)) -- se for player o alvo
  13. Gostei
    ManoTobira deu reputação a kranzix em [Modern Acc] WebSite Otpokemon.com (2014) versão 1.0   
    Iae pessoal blz? 
     
     *Sempre procurei um website igualzinho ao do otpokemon.com mas como nunca encontrei então tive a
    iniciativa de montar um do "0" deu um trabalhozinho mas valeu a pena!!
     
    +Aqui estão algumas imagens:
     



    ___________________________________________________________________________________________________________
      Obs: No Otpokemon WebSite 1.0 as configuração do config.lua do seu servidor de poketibia so serão suportadas na versão criptografada Sha1 (Então altere para Sha1 e mysql) Não esqueça tambem de remover as linhas "----" do config.lua do seu servidor para evitar problemas futuros!. Desative o account manager do config.lua também pois se ele permanecer os irá bugar os char's e não vão poder logar no servidor.  
    A instalação é simples não precisa de senha de administrador, terão que mudar o acesso de pagina direto do banco de dados qualquer duvida comentem!   Aconcelhado usar Xampp 1.7.7 pois não tive nenhum problema com ele! ___________________________________________________________________________________________________________  
    *Bom essa é a versão 1.0 então não está 100% igual ao website do otpokemon.com mas irei fazer o maximo
     
    para que fique 100% igual.
     
    - O WebSite é 100% Editavel so é preciso ter os conhecimentos necessarios.
     
    ...É isso ae galera espero que curtam o website!
     
    (Em breve na versão 2.0 mas novidades aguardam)
     
    $-Obs:Caso forem compartilhar esse post, não esqueçam de deixar os creditos-$
     
     
    Ahh.... Lembrando não esqueça de dar REP+ até
     
    porque deu um trabalhaço! 
    ___________________________________________________________________________________________________________
     
    Download:http://www.mediafire.com/download/cvttts1ae47usrb/WebSite+OTPokemon+1.0+%282014%29.rar
     
     
    Scan:https://www.virustotal.com/pt/file/3b20e20c6f103fd508de6693abea5e2e16c36aaff139d605124e9db183260edc/analysis/1392469897/
     
     
    Aviso: A senha para descompactar o WebSite OTPokemon 1.0 (2014).Rar é: (otpokemon!) sem os parenteses.
    ......................................................................................................................................................................................................................
     
    *- Creditos -*
     
    Modern Acc e (Kranzix).
  14. Gostei
    ManoTobira recebeu reputação de SomeBody em [Action] Hiraishin Kunai   
    Esse sistema é o da hiraishin kunai uma kunai que teleporta para position que voce escolhe vamos lá
     
    Em Actions/Scripts/ Copie um Arquivo.lua e renomeie para hiraishin apague tudo e coloque a seguinte script:
     



     
    em Actions.xml Adicione a seguinte tag:
    <action itemid="7382" event="script" value="hiraishin.lua" allowfaruse="1"/> explicando
     
    local vocs = {250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261} --- aqui é o id das voc que pode usar a kunai
     
    local parede = {1030, 1029, 1025, 1026, 1027, 1259, 1028, 1032, 1034, 1033, 1536, 1533, 873, 919, 874, 1037, 4472, 4475, 4471, 3388, 3373, 3363, 3398, 3408, 3417, 3420, 3407, 3368, 2701, 5130, 6170, 6166, 1596}
    são as parede que não podem passar  etc...
     

     
    Créditos
    Luan Mello
  15. Gostei
    ManoTobira recebeu reputação de SomeBody em [Pedido] Hiraishin Kunai   
    vai em actions/scripts e copie um arquivo e renomeie para hirashin e cole isso nele:
     
    function onUse(cid, item, fromPosition, itemEx, toPosition)   local pos = fromPosition local aqui = getPlayerPosition(cid) local vocs = {300, 301, 302, 303, 304, 305, 306, 307} local agua = {4610, 4612, 4611, 4664, 4613, 4666, 4646, 4654, 4609, 4665, 4608, 4625, 4665, 4666, 4645} local parede = {1030, 1029, 1025, 1026, 1027, 1259, 1028, 1032, 1034, 1033, 1536, 1533, 873, 919, 874, 1037, 2700, 2708, 4472, 4475, 4471, 3388, 3373, 3363, 3398, 3408, 3417, 3420, 3407, 3368, 2701, 5130, 6170, 6166, 1596, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422} local pedra = {874, 919, 873, 2707, 2784, 2778, 3330, 4471, 4475, 4473, 4472, 4474, 4468, 4478, 4469, 4470, 4479, 2703, 2704, 1534, 2739, 3867, 5324, 5316, 5315, 5317, 1600, 1597, 1601}   if getDistanceBetween(aqui, toPosition) >= 8 then return doPlayerSendTextMessage(cid, 27, "Está muito longe.")   elseif(not(isSightClear(aqui, toPosition, 1))) then return doPlayerSendTextMessage(cid, 27, "Isso é impossivel.")   elseif(getTilePzInfo(aqui)) then return doPlayerSendCancel(cid, "Não pode usar a tecnica Deus Dragão em casas ou areas protegidas.")   elseif(getTilePzInfo(toPosition)) then return doPlayerSendCancel(cid, "Não pode usar a tecnica Deus Dragão em casas ou areas protegidas.")   elseif(isInArray(agua, itemEx.itemid)) then return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em agua")   elseif(isInArray(parede, itemEx.itemid)) then return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em paredes")   elseif(isInArray(pedra, itemEx.itemid)) then return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em pedras")   elseif(not(isInArray(vocs, getPlayerVocation(cid)))) then return doPlayerSendTextMessage(cid, 27, "Desculpe, Apenas Minato pode usar a tecnica Deus Dragão.") end   if(doTeleportThing(cid, toPosition, false)) then doSendMagicEffect(pos, 24) doSendMagicEffect(toPosition, 24)   doCreatureSay(cid, "Shunshin", 19) return doSendDistanceShoot(pos, toPosition, 16) end   return doPlayerSendCancel(cid, "Desculpe nao foi possivel.") end     agora em actions.xml vcs add:   <action itemid="7382" event="script" value="hiraishin.lua" allowfaruse="1"/>
  16. Gostei
    ManoTobira deu reputação a deivaoo em [MOD] Pokedex Window para base PDA   
    Bom galera, estive estudando OtClients e decidi fazer uma pokedex semelhante do pxg, mas para PDA...
     
    Versão Atual: 1.6
     
    - Histórico


    - Prints
    *Obs.: Veja hora/data de cada print [tiro o print quando termino de editar o mod]
    -1.0 [Como não é necessária nenhuma edição no servidor, fiz o teste no Pokemon Force]


    -1.1


    -1.2


    -1.3


    -1.4
      -1.6  
    - Créditos:
    @PXG ~ por criar o original; @david0703 ~ pelo desenvolvimento do mod; @tioj ~ pela idéia da efetividade; @Soulviling ~ pela ideia de fechar a pokedex quando deslogar;   - Downloads @ v1.0 @
    Bom, é isso...
    Espero que tenham gostado...

    *Obs¹.: Na versão 2.0 colocarei a tão esperada lista de pokemons.
    *Obs².: Quando fui postar a versão 1.3 deu um erro ao editar o tópico e ficou tudo bagunçado, tive que refazer todo o layout do tópico.   
    *Obs³.: Excluíram as versões anteriores que eu postei... Tá certo! Belo incentivo de postagem de conteúdo!      
  17. Gostei
    ManoTobira deu reputação a yuricrazk9 em PokeGOD v0.1 - Open Source   
    Eai PokeTibianos   !    Trago aqui o PokeGOD um servidor que está sendo desenvolvido de um base antiga o PField Project, Será disponibilizado atualizações aqui semanalmente, Atualmente estamos na v0.1.   As sources já vem na pasta do Server na pasta 'src'.     Systems do PokeGOD!   Bike System: 100% Caught System: 100% Evolution System: 100% Go-Back System: 100% Gerações 1: 100% Gerações 2: 100% Limite de 6 Pokemons na Bag: 100% Moves System: 100% Portrait System: 100% Pokedex System: 100% Ride System: 100% Sem Level System! fly System: 100% Surf System: 100% Teleport System: 100% e etc...     Observações   Os systems acima apenas afirma que os sistema em si esta em 100%, quero deixa bem claro que nem todos os pokemos então adicionados ao sistemas.   Lembrando tambem que possa aparece bugs porque todos os OtServs de Poketibia á Bugs... Mais Caso Ocorra algum por favor me relate que sera rapidamente corrigido.   Obrigado por acompanhar nosso projeto, by: YuriAntunes!    Prints        Downloads PokeGOD      PokeGOD  v0.1 - Data 15/06/2015   PokeServer v0.1: http://www.mediafire.com/download/ansu4fqtiso9u7v/PokeServer.rar PokeClient v0.1: http://www.mediafire.com/download/trpcexe33nre9t2/PokeClient.rar   Scan PokeServer v0.1: https://www.virustotal.com/pt/file/93990c7828eb5747fbc36785ce5fe89f93c7489ce84b7dde29b5c32f4268ba5b/analysis/1434401536/ Scan PokeClient v0.1: https://www.virustotal.com/pt/file/9c24143be6c215c84252722c7115ddb49828a5dcdd44e597a90e24f63ba156ad/analysis/1434402568/    
  18. Gostei
    ManoTobira deu reputação a MikaelsonTO em [8.54] Pokémon Imperium [V1]   
    Fala galera do TibiaKing, beleza?   
    Eu estava desenvolvendo o projeto Imperium, porém estou tendo alguns problemas e não vou conseguir terminar. Então vou liberar o avanço do projeto pra vocês.
     
     • Menu:
    ├ Informações;
    ├ Edições;
    ├ Erros;
    ├ ScreenShots;
    ├ Download;
    └ Créditos.
     
     • Informações:



     
     • Edições: 



     
     • Erros:



     
     • ScreenShots:



     
     • Download:



     
     • Créditos: 



  19. Gostei
    ManoTobira recebeu reputação de Angeles em (Resolvido)[bug] npc não aceita novo din din   
    procura no items.xml o item q vc qer q eles aceitem e depois coloque isso
    <attribute key="worth" value="10000" />
    no lugar de 10000 vc coloca o valor q vc qer q vale o dinheiro
  20. Gostei
    ManoTobira deu reputação a Snowsz em [OTC] Manager Window   
    Testado: Otclient 0.6.7, TFS 0.4
    Versão: 1.0
    Descrição: Um mod que adiciona um botão, ao lado esquerdo do seu painel, quando clicar irá aparecer uma janela, com comandos.
    Autor: Snowsz
     
     
    Imagem:



     
     
    Bom, só coloquei os comandos que mais uso, acho que ele seja auto explicativo, mas, vou explicar um pouco...

    Em name coloque o nome do player, marque uma caixinha do que será adicionado, e em count coloque o valor que o player deverá ganhar desse determinado skill, após isso, clique em Addskill.
     
     
    Os dois "X" são para limpar a caixa, assim como o botão, clear, para limpar as caixas dos outros comandos.
    Quando clicar em reload, vai aparecer uma lista de opções, clique na que quiser dar reload.
    No botão commands, quando clicar, irá aparecer a lista de comandos.

    Ele só funciona com players que possuam cargo GM, CM e GOD.

    Coloque isto no seu login.lua(para quem não sabe, no seu servidor não no CLIENT!):

     
    if getPlayerAccess(cid) > 3 then doPlayerSendCancel(cid, "$@$Administrador") doPlayerSendCancel(cid, " ") end Download V2:
    Link: https://www.dropbox.com/s/axmop6e80mvlfi7/managerwindow.rar?dl=0  (coloque o arquivo na pasta mods)
    Scan: https://www.virustotal.com/pt/file/8fbe8b00e272f623bd2ac70c5fa1c39855d5e9c8469efcaae841db2e9eec138a/analysis/1422324181/
     
    Atualizado para versão 2, removido todos os bugs que encontrei e adicionado novos botões, para adicionar mais comandos basta abrir o arquivo lua do mod, procurar por "local uses" e adicionar mais.
    (obs: esses comandos do "uses", não podem precisar de parâmetro, ex: /r 10)
     

    -->Change log v2
    -Retirado alguns bugs
    -Código diminuído e melhor identado
    -Adicionado novas funcionalidades
    -Adicionado compatibilidade do comando addskill para "skills", como distance, shield e sword, entre o restante.
  21. Gostei
    ManoTobira deu reputação a Thiago Rulexz em [C++] Attack Speed   
    Riven para TFS 0.3.6 Utilize este codigo
    uint32_t Player::getAttackSpeed() { int32_t SpeedAttack; SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_SWORD, SKILL_LEVEL) * 10); if (SpeedAttack < 500) { return 500; } else { return (uint32_t) SpeedAttack; } }
  22. Gostei
    ManoTobira recebeu reputação de ZwhiteDog em SPELL - Hiraishin Jutsu Seal   
    cara eu tenho 1 aki sem tempo pra kunai sumir pq quando eu fiz eu n sabia se tinha tempo ou nao pra sumir
     
    Hiraishin Seal:
     
    local s = {5668,5669,5667} local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) function x(p, d) local t = {{x=p.x,y=p.y-1,z=p.z},{x=p.x+1,y=p.y,z=p.z},{x=p.x,y=p.y+1,z=p.z},{x=p.x-1,y=p.y,z=p.z}} return t[d+1] end function onCastSpell(cid, var) local position1 = {x=getPlayerPosition(cid).x+1, y=getPlayerPosition(cid).y+1, z=getPlayerPosition(cid).z} local pos = getCreaturePosition(cid) local item = 2335 --id da kunai doCreateItem(item, getCreaturePosition(cid)) local mystr = "return {x=xx,y=yy,z=zz}" local mystr = string.gsub(mystr, "xx", pos.x) local mystr = string.gsub(mystr, "yy", pos.y) local mystr = string.gsub(mystr, "zz", pos.z) local position112 = {x=getPlayerPosition(cid).x, y=getPlayerPosition(cid).y, z=getPlayerPosition(cid).z} setPlayerStorageValue(cid, s[1], mystr) setPlayerStorageValue(cid, s[2], os.time()+0) setPlayerStorageValue(cid, s[3], 1) for i = 1, 5 do end doCombat(cid, combat, var) return true end   Hiraishin no Jutsu:   local s = {5668,5669,5667} function onCastSpell(cid, var) local parameters = { cid = cid, var = var} k = getPlayerStorageValue(cid, s[2]) - os.time() if k <= 0 then t = loadstring(getPlayerStorageValue(cid, s[1]))() local position1 = {x=getPlayerPosition(cid).x+1, y=getPlayerPosition(cid).y+1, z=getPlayerPosition(cid).z} local position2 = {x=t.x+1, y=t.y+1, z=t.z} doTeleportThing(cid, t) doSendMagicEffect(position1, 82) addEvent(doSendMagicEffect, 0, position2,186) addEvent(doSendMagicEffect, 500, t, 131) setPlayerStorageValue(cid, s[3], -1) else doPlayerSendTextMessage(cid, 19, "Aguarde "..k.." segundos.") end return true end  
    se ajudei +rep
  23. Gostei
    ManoTobira recebeu reputação de Destroyergbk em [Action] Hiraishin Kunai   
    Esse sistema é o da hiraishin kunai uma kunai que teleporta para position que voce escolhe vamos lá
     
    Em Actions/Scripts/ Copie um Arquivo.lua e renomeie para hiraishin apague tudo e coloque a seguinte script:
     



     
    em Actions.xml Adicione a seguinte tag:
    <action itemid="7382" event="script" value="hiraishin.lua" allowfaruse="1"/> explicando
     
    local vocs = {250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261} --- aqui é o id das voc que pode usar a kunai
     
    local parede = {1030, 1029, 1025, 1026, 1027, 1259, 1028, 1032, 1034, 1033, 1536, 1533, 873, 919, 874, 1037, 4472, 4475, 4471, 3388, 3373, 3363, 3398, 3408, 3417, 3420, 3407, 3368, 2701, 5130, 6170, 6166, 1596}
    são as parede que não podem passar  etc...
     

     
    Créditos
    Luan Mello
  24. Gostei
    ManoTobira deu reputação a leoleo em Admin Mode - Sistema para alternar adm/game   
    Bom este Talkactions que estou postando é baseado em servidores de Samp
    Este Talkaction torna possivel que os administradores joguem normalmente como qualquer outro player, e quando se fizer necessário ativar o modo Staff (god, cm, gm, tutor ou qual seja o cargo dele) e desativar sem muitas complicações.
     
    Segue o script:
    Talkaction.xml
    <talkaction words="/mdt" event="script" value="mdt.lua"/> Talkaction/mdt




    Para
    ativar: /mdt on
    desativar: /mdt off
     
    Bom espero que gostem, pois apensar de não ser nenhum scripter, eu faço com o maior capricho possível.
  25. Gostei
    ManoTobira deu reputação a GabrielSapient em Launcher AutoUpdate C#   
    Galera sempre procurei um Launcher AutoUpdate para meu servidor, depois de muita pesquisa e pouco conhecimento consegui fazer um em C#, está ai:
     

     
    1. Download:
     
     
    • Download | • Scan

    2. Oque ele faz:
     
     
    • Verifica a existência da versão local na pasta do cliente;   • Se a versão do arquivo não existir, ele assume que a versão é "1.0" e cria um arquivo de versão;   • Verifica arquivo .xml no servidor de atualização;   • Baixar atualizações para todas as versões maiores do que a versão atual do cliente (atualiza tudo em apenas formato de arquivo .zip);   • Extrai os arquivos .zip;   • Exclui os arquivos .zip após a extração;   • Arquiva a versão atualizada na pasta do cliente;   • E, finalmente, desbloqueia o botão "Start Game".     3. Como editar:     • Abra o arquivo .sln na pasta "VS Project" com o Visual Studio:   Procure por: string Server = "http://127.0.0.1/Updates/"; • Altere o http://127.0.0.1/Updates/ para qualquer URL que você estará hospedando suas atualizações.
        • Agora vamos procurar por:   Process.Start("OTClient PkR DX9.exe", "\\Pokémon Rusty"); • Modifique o OTClient PkR DX9.exe pelo nome do .exe do seu Client.
     
    • \\Pokémon Rusty e a pasta que está seu .exe e vai ficar seu Launcher. (troque sem tirar os "\\")
     

      • No Visual Studio, selecione o controle WebBrowser(Neste caso, o nome "patchNotes") e alterar a url do "http://127.0.0.1/"para o caminho do arquivo index.html, na pasta do host:       OBS: Isto á opcional, é apenas um template em .html. Você pode remove-lo e editar da maneira deseja.       • Agora apenas jogue o .exe, .dll e o arquivo version da pasta "Launcher\VS Project\Launcher v2\bin\Debug ou Release" para a pasta de seu Client:       Pronto! Agora e com o Site.     • No host do site, apos colarmos a pasta Updates, editamos o arquivo Updates.xml, para cada atualização adicionamos um <update> fechamos com </update> como no exemplo do arquivo. Colocamos o arquivo atualização em .zip nessa mesma pasta, editando a versão e o nome no arquivo:   • No arquivo version.txt colocamos a versão da nova atualização:   • Uma dica para o .zip de atualização é colocar em pastas o caminho no client desejado a fazer update. Exemplo: data/things/854 nesta pasta colocaremos os arquivos que será substituído, no exemplo foi Tibia.spr e .dat. Depois compactamos e deixamos na pasta Updates, sem esquecer de colocar o nome no arquivo Updates.xml.   4. Dica   • Pronto! Agora e só criar um instalador com o launcher, com atalho na área de trabalho (o launcher é o .exe que você colocou no client). Você pode modificar o launcher do jeito que quiser, o arquivo index.html e etc. Quando abrir o arquivo ele irá atualizar, liberar o botão "Start Game", e quando você clicar vai fechar o Launcher e abrir o Client.     5. Créditos     Eu - Pelo launcher e pelo tutorial.

Informação Importante

Confirmação de Termo