Ir para conteúdo
  • Cadastre-se

izac ximenes

Membro
  • Total de itens

    224
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Obrigado
    izac ximenes recebeu reputação de UsToOliNN em mini tutorial de como fazer um mondulo(mods)   
    O que são?
    Modules são scripts que fazem alterações no cliente, se você compilou seu otclient com proteção contra bot, essas modificações se restringirão quase completamente a GUI, o que difere os MODs dos Modules é que os Modules são os scripts essenciais do otclient e os MODs são adições criadas por usuários, portanto se você quer modificar algo que já existe, procure na pasta modules, se você quer criar algo novo, crie na pasta MODs.



    Como eu crio um novo MOD?
    Primeiro crie uma pasta dentro da pasta mods, por exemplo, meu_mod, o modulo se consiste não apenas de scripts Lua mas também de 2 arquivos: meu_mod.otmod e meu_mod.otui, sendo que o arquivo .otmod é essencial para qualquer modulo enquanto o .otui serve apenas para mods que contenham uma GUI dentro do otclient.

    Observe este exemplo de arquivo .otmod:
     

    Module name: otclient_meumod description: Olha mãe, um mod author: Eventide website: http://otserv.com.br autoload: true autoload-priority: 1000 sandbox: true @onLoad: | dofile 'meu_mod' meu_mod.init() @onUnload: | meu_mod.terminate()  
     
    Note que há um certo numero de espaços entre certas partes do código, este numero de espaços é essencial e não deve ser mudado, o script é extremamente sensível, recomendo que você copie e cole sempre ao invés de digitar tudo, o mesmo vale para o arquivo .otui, agora vou explicar parte por parte, exceto as que são óbvias:
     
    autoload: true autoload-priority: 1000 sandbox: truePadrão, não mude. @onLoad: | dofile 'meu_mod' meu_mod.init() @onUnload: | meu_mod.terminate()  
     
    Muito bem, se você está olhando este tutorial provavelmente sabe o que o dofile faz, certo? Não? dofile executa um determinado script, portando esse 'meu_mod' deve ser o nome do script principal do seu modulo, que deve ser, mas pode não ser, o nome do seu modulo, claro que o script tem que ter a extensão .lua, mas não é necessário especificar isso no dofile.
    meu_mod.init() e meu_mod.terminate() são duas funções padrão, que ficarão dentro de uma tabela, a tabela do seu modulo, voltarei nisso depois de explicar sobre o arquivo otui.

    Agora um exemplo de arquivo .otui:
     
    MainWindow !text: tr('Meu MOD') size: 160 450 @onEnter: meu_mod.destroy() @onEscape: meu_mod.destroy() Label id: meuModLabel !text: tr('Oi, eu sou um mod') width: 130 height: 200 anchors.top: prev.top anchors.left: prev.left margin-top: 5 margin-left: 120      Button id: meuModButton !text: tr('Bem-vindo') width: 100 height: 15 anchors.right: parent.right anchors.bottom: parent.bottom margin-right: -6 margin-bottom: -5 @onClick: meu_mod.welcome()  
     
    Percebe a semelhança com um código CSS? Pois é, essa é uma linguagem baseada no CSS desenvolvida especialmente para o otclient, o nome dessa linguagem é OTML, agora explicando parte por parte.

    MainWindow é a janela que será usada para a interface, neste caso, MainWindow é o padrão para a janela do cliente.

    !text é o nome da janela, sempre use a função tr() para colocar a string.

    size é o tamanho da janela, a sintaxe é: largura, altura.

    @onEnter é a função que é chamada quando se aperta a tecla enter.


    @onEscape é a função que é chamada quando se aperta a tecla esc.

    Label é usado na maioria das vezes para mostrar um texto.

    id deve ser um nome único e sem espaços que represente este texto.

    !text é o texto que será mostrado na label, novamente a string deve ser colocada dentro da função tr().

    width é a largura da label.

    margin-right que funciona igual o CSS, quanto maior o valor, mais ele se posicionará contra a direita, quanto menor, a favor.

    margin-bottom é igual ao margin-right, mas em vez de contra/favor a direita ele funciona para baixo.

    @onClick deve ser configurado com a função que é chamada quando se clica no butão.
     
    O script .lua
    Agora chegamos a parte final deste tutorial, como fazer o seu script, a parte principal do mod.
    Primeiro crie o arquivo, que aqui será chamado de meu_mod.lua, observe como ficou o arquivo a partir do que já foi feito até agora:
     

    meu_mod = {} modWindow = nil function meu_mod.init()     connect(g_game, {onGameStart = meu_mod.run}) end function meu_mod.terminate()     disconnect(g_game, {onGameStart = meu_mod.run}) end function meu_mod.run()     modWindow = g_ui.displayUI('meu_mod.otui') end function meu_mod.welcome()     g_game.talk("Este é o meu modulo!") end function meu_mod.destroy() modWindow:hide() end Como eu acredito que já deixei bem claro o que faz maioria das funções, darei enfase a função init e terminate, a função init serve para alinhar os eventos do cliente com o seu script, e a terminate desfaz, isso é feito a partir das funções connect e disconnect, cuja sintaxe é:

    connect(g_game, {eventoPadrão= meuEvento})

    disconnect(g_game, {eventoPadrão= meuEvento})

    Esse tutorial foi feito com o otclient 6.2.1 
     
    mini tutorial que achei de otclient
    creditos Evesys 
  2. Gostei
    izac ximenes recebeu reputação de Ayna em mini tutorial de como fazer um mondulo(mods)   
    O que são?
    Modules são scripts que fazem alterações no cliente, se você compilou seu otclient com proteção contra bot, essas modificações se restringirão quase completamente a GUI, o que difere os MODs dos Modules é que os Modules são os scripts essenciais do otclient e os MODs são adições criadas por usuários, portanto se você quer modificar algo que já existe, procure na pasta modules, se você quer criar algo novo, crie na pasta MODs.



    Como eu crio um novo MOD?
    Primeiro crie uma pasta dentro da pasta mods, por exemplo, meu_mod, o modulo se consiste não apenas de scripts Lua mas também de 2 arquivos: meu_mod.otmod e meu_mod.otui, sendo que o arquivo .otmod é essencial para qualquer modulo enquanto o .otui serve apenas para mods que contenham uma GUI dentro do otclient.

    Observe este exemplo de arquivo .otmod:
     

    Module name: otclient_meumod description: Olha mãe, um mod author: Eventide website: http://otserv.com.br autoload: true autoload-priority: 1000 sandbox: true @onLoad: | dofile 'meu_mod' meu_mod.init() @onUnload: | meu_mod.terminate()  
     
    Note que há um certo numero de espaços entre certas partes do código, este numero de espaços é essencial e não deve ser mudado, o script é extremamente sensível, recomendo que você copie e cole sempre ao invés de digitar tudo, o mesmo vale para o arquivo .otui, agora vou explicar parte por parte, exceto as que são óbvias:
     
    autoload: true autoload-priority: 1000 sandbox: truePadrão, não mude. @onLoad: | dofile 'meu_mod' meu_mod.init() @onUnload: | meu_mod.terminate()  
     
    Muito bem, se você está olhando este tutorial provavelmente sabe o que o dofile faz, certo? Não? dofile executa um determinado script, portando esse 'meu_mod' deve ser o nome do script principal do seu modulo, que deve ser, mas pode não ser, o nome do seu modulo, claro que o script tem que ter a extensão .lua, mas não é necessário especificar isso no dofile.
    meu_mod.init() e meu_mod.terminate() são duas funções padrão, que ficarão dentro de uma tabela, a tabela do seu modulo, voltarei nisso depois de explicar sobre o arquivo otui.

    Agora um exemplo de arquivo .otui:
     
    MainWindow !text: tr('Meu MOD') size: 160 450 @onEnter: meu_mod.destroy() @onEscape: meu_mod.destroy() Label id: meuModLabel !text: tr('Oi, eu sou um mod') width: 130 height: 200 anchors.top: prev.top anchors.left: prev.left margin-top: 5 margin-left: 120      Button id: meuModButton !text: tr('Bem-vindo') width: 100 height: 15 anchors.right: parent.right anchors.bottom: parent.bottom margin-right: -6 margin-bottom: -5 @onClick: meu_mod.welcome()  
     
    Percebe a semelhança com um código CSS? Pois é, essa é uma linguagem baseada no CSS desenvolvida especialmente para o otclient, o nome dessa linguagem é OTML, agora explicando parte por parte.

    MainWindow é a janela que será usada para a interface, neste caso, MainWindow é o padrão para a janela do cliente.

    !text é o nome da janela, sempre use a função tr() para colocar a string.

    size é o tamanho da janela, a sintaxe é: largura, altura.

    @onEnter é a função que é chamada quando se aperta a tecla enter.


    @onEscape é a função que é chamada quando se aperta a tecla esc.

    Label é usado na maioria das vezes para mostrar um texto.

    id deve ser um nome único e sem espaços que represente este texto.

    !text é o texto que será mostrado na label, novamente a string deve ser colocada dentro da função tr().

    width é a largura da label.

    margin-right que funciona igual o CSS, quanto maior o valor, mais ele se posicionará contra a direita, quanto menor, a favor.

    margin-bottom é igual ao margin-right, mas em vez de contra/favor a direita ele funciona para baixo.

    @onClick deve ser configurado com a função que é chamada quando se clica no butão.
     
    O script .lua
    Agora chegamos a parte final deste tutorial, como fazer o seu script, a parte principal do mod.
    Primeiro crie o arquivo, que aqui será chamado de meu_mod.lua, observe como ficou o arquivo a partir do que já foi feito até agora:
     

    meu_mod = {} modWindow = nil function meu_mod.init()     connect(g_game, {onGameStart = meu_mod.run}) end function meu_mod.terminate()     disconnect(g_game, {onGameStart = meu_mod.run}) end function meu_mod.run()     modWindow = g_ui.displayUI('meu_mod.otui') end function meu_mod.welcome()     g_game.talk("Este é o meu modulo!") end function meu_mod.destroy() modWindow:hide() end Como eu acredito que já deixei bem claro o que faz maioria das funções, darei enfase a função init e terminate, a função init serve para alinhar os eventos do cliente com o seu script, e a terminate desfaz, isso é feito a partir das funções connect e disconnect, cuja sintaxe é:

    connect(g_game, {eventoPadrão= meuEvento})

    disconnect(g_game, {eventoPadrão= meuEvento})

    Esse tutorial foi feito com o otclient 6.2.1 
     
    mini tutorial que achei de otclient
    creditos Evesys 
  3. Gostei
    izac ximenes recebeu reputação de Risadinhadomal em [8.54]Erondino v15 com source   
    Download:



    Desculpe por nao coloca scan to sem tempo alguem pode fazer isso por min,mais e 100% confiavel peguei direto da pagina do erondino site
    Creditos:
    Erondino pelo serve
  4. Gostei
    izac ximenes recebeu reputação de isex em [8.54]Erondino v15 com source   
    Download:



    Desculpe por nao coloca scan to sem tempo alguem pode fazer isso por min,mais e 100% confiavel peguei direto da pagina do erondino site
    Creditos:
    Erondino pelo serve
  5. Gostei
    izac ximenes recebeu reputação de Lord Stryton em [8.54]Erondino v15 com source   
    Download:



    Desculpe por nao coloca scan to sem tempo alguem pode fazer isso por min,mais e 100% confiavel peguei direto da pagina do erondino site
    Creditos:
    Erondino pelo serve
  6. Gostei
    izac ximenes deu reputação a gristony em [Duvida]função lua no c++   
    olhei o seu arquivo lua.cpp

        //setPokemonLevel(cid,level)
        lua_register(m_luaState, "SetPokemonLevel", LuaScriptInterface::luaSetPokemonLevel);

    amigo pq tá maiúsculo tem que ser assim
     
        //setPokemonLevel(cid,level)
        lua_register(m_luaState, "setPokemonLevel", LuaScriptInterface::luaSetPokemonLevel);
  7. Gostei
    izac ximenes deu reputação a vyctor17 em Criaturas Passivas   
    Criaturas Passivas. (tfs 0.3.6pl1)
     
    hoje eu fiquei meio bolado mexendo em meu servidor com um cat me seguindo e pensei, mano que droga o sistema de hostilidade do tibia é uma porcaria.., então resolvi dar uma olhada em como ele funcionava nas source, e acabei vendo que modificando pouca coisa já se tem um sistema de hostilidade melhor não perfeito mas melhor . talvez daqui uns dias eu consiga fazer ele ser 100%, nesse método a criatura só ataca depois de perder vida e o ideal seria ela atacar ao tomar target mas isso tbm é facil de fazer dentro de alguns dias eu atualizo o tópico com isso. 
     
    Sem mais explicações vamos as ediçoes: 
     
    em monster.cpp: procure por, 
    bool Monster::selectTarget(Creature* creature) agora nesta função procure por:
    if(it == targetList.end()) { //Target not found in our target list. #ifdef __DEBUG__ std::cout << "Target not found in targetList." << std::endl; #endif return false; } e logo a baixo adicione:
    if(!isHostile() && getHealth() == getMaxHealth() && !isSummon()){ return false; } e na função a baixo deixa assim:
    if((isHostile() || isSummon() || !isHostile() && getHealth() != getMaxHealth()) && setAttackedCreature(creature) && !isSummon()) Dispatcher::getInstance().addTask(createTask( boost::bind(&Game::checkCreatureAttack, &g_game, getID()))); Agora ainda no monster.cpp procure por:
    bool Monster::canUseAttack(const Position& pos, const Creature* target) const e remova isso:
    if(!isHostile()) return true; agora é só recompilar e esta pronto .
     
    Gostou?, então se puder me ajude!

     
    não autorizo o re-post em qualquer outro fórum sem minha autorização.
     
    vyctor17 - Waki-V LTDA ©
  8. Gostei
    izac ximenes recebeu reputação de PoketibiAn0 em [8.54]Erondino v15 com source   
    Download:



    Desculpe por nao coloca scan to sem tempo alguem pode fazer isso por min,mais e 100% confiavel peguei direto da pagina do erondino site
    Creditos:
    Erondino pelo serve
  9. Gostei
    izac ximenes recebeu reputação de deivaoo em [Duvida]Como inserir o level do Poke do lado do nome dele   
    E nada mano e facil e porque to fazendo do "zero" o sistema de level
  10. Gostei
    izac ximenes deu reputação a zipter98 em (Resolvido)[Pedido]Algum scripter para min ajuda nesse script   
    Supondo que a tabela movestable estivesse assim:
    local movestable = {     ["Bulbasaur"] = {         move1 = {name = "Razor Leaf", level = 20, cd = 7, target = 1},     }, } refiz sua função da seguinte maneira: function getMoveDexDescr(pokemon, number)     if not pokemon then          return ""     elseif not movestable[pokemon] then         return print(pokemon.." doesn't exist on movestable.")     end     local moves = {         [1] = movestable[pokemon].move1,         [2] = movestable[pokemon].move2,         [3] = movestable[pokemon].move3,         [4] = movestable[pokemon].move4,         [5] = movestable[pokemon].move5,         [6] = movestable[pokemon].move6,         [7] = movestable[pokemon].move7,         [8] = movestable[pokemon].move8,         [9] = movestable[pokemon].move9,         [10] = movestable[pokemon].move10,     }     if not moves[number] then         return print("move"..number.." isn't a valid move on "..pokemon..".")     end     local movement = moves[number]     local name, level, cooldown, target = movement.name, movement.level, movement.cd, movement.target     if target == 1 then         target = "Sim"     else         target = "Não"     end     return "\n Nome:"..name.."\n Level:"..level.."\n Tempo:"..cooldown.."\n Alvo:"..target.."." end
  11. Gostei
    izac ximenes deu reputação a Fir3element em [Erro]Compilação dando erro source 8.54   
    Exclui seu dev e coloca esse no lugar: http://www.4shared.com/archive/8NIlTt7z/TheForgottenDevCpp.html
  12. Gostei
    izac ximenes recebeu reputação de RodAlbu em (Resolvido)[AJUDA] Action spawn mosnter   
    tenta esse 
    pokemons = { "pokemon1", "pokemon2", "pokemon3", } function onUse(cid, item, fromPosition, item2, toPosition) if isPlayer(cid) then doSummonCreature(pokemons[math.random(#pokemons), getCreaturePosition(cid)) doSendMagicEffect(getCreaturePosition(cid), 29) doRemoveItem(item.uid, 1) doCreatureSay(cid,"Cuidado! Pokemons Muito Perigosos apareceram do Nada OMG.", TALKTYPE_ORANGE_1) end return true end
  13. Gostei
    izac ximenes deu reputação a Snowsz em [OTC] MOD que deixa o OTC exclusivo para seu servidor.   
    Testado em:
    TFS 0.4 8.60.
    Otclient 0.6.3.
     
    Descrição: O player só poderá entrar no seu otserver com este mod, caso contrário, levará um kick bonito
     
    Bom galera, criei este mod para ajudar um membro do fórum que, quer que seu server só seja acessado com um otclient dele, então, vamos ao mod.

    Vá na pasta do seu otclient e entre na pasta mods, lá, crie outra pasta, chamada exclusiveclient, nesta pasta, crie um arquivo com o nome exclusiveclient.lua e coloque isso dentro:
    function init() connect(g_game, 'onTextMessage', serverComunication) connect(g_game, { onGameEnd = hide } ) end function terminate() disconnect(g_game, { onGameEnd = hide }) disconnect(g_game, 'onTextMessage', serverComunication) end function serverComunication(mode, text) if not g_game.isOnline() then return end if mode == MessageModes.Failure then if text:find("$@$ExclusiveClient") then g_game.talk("/$@$exclusive$@$") end end end Feche e salve o arquivo.
    Ainda na mesma pasta, crie um novo arquivo chamado, exclusiveclient.otmod (lembrem-se da extensão sempre, exemplo: login>.lua<)
    No exclusiveclient.otmod coloque isto dentro:
    Module name: Exclusive Client description: author: Snowsz website: autoload: true autoload-priority: 1000 scripts: - exclusiveclient.lua @onLoad: init() @onUnload: terminate() Após isso, feche e salve o arquivo, não é só isso, agora iremos mexer no seu servidor, vá na pasta data/creaturescripts/scripts e abra o login.lua, coloque isso antes do ultimo return true.
    addEvent(doPlayerSendCancel, 100, cid, "$@$ExclusiveClient$@$") addEvent(doPlayerSendCancel, 200, cid, " ") addEvent(function() if getPlayerStorageValue(cid, "exclusive") <= 0 then doRemoveCreature(cid) end end, 500) Após isso, feche e salve o arquivo, agora, crie um novo arquivo nesta mesma pasta, chamado exclusivelogout.lua, nele coloque isto dentro:
    function onLogout(cid) setPlayerStorageValue(cid, "exclusive", -1) return true end Feche e salve o arquivo, agora, vá em data/creaturescripts/creaturescripts.xml e coloque esta tag:
    <event type="logout" name="ExlusiveLogout" event="script" value="exclusivelogout.lua"/> Após isso, vá em data/talkactions/scripts e crie um arquivo chamado exclusive.lua, coloque isso dentro:
     
    function onSay(cid, words, param) setPlayerStorageValue(cid, "exclusive", 1) return true end Feche e salve o arquivo, vá em data/talkactions/talkactions.xml e coloque esta tag:
    <talkaction log="no" access="0" words="/$@$exclusive$@$" event="script" value="exclusive.lua"/> Feche e salve o arquivo, pronto, sistema instalado, espero que gostem
     
    Créditos: Snowsz
  14. Gostei
    izac ximenes recebeu reputação de narazaky em O TK quer você!   
    sem querê despreza os outros mais vejo que quem ta trazendo muita coisas interessante e ajuda a galera e Orochi elf
    #minhaopinião 
  15. Gostei
    izac ximenes recebeu reputação de Frenesy em (Resolvido)getCreatureSummons(cid)   
    function onStepIn(cid) local Summ = getThingPos((getCreatureSummons(cid)[1])) doSendMagicEffect(Summ, 49) end tenta desse jeito

    function onStepIn(cid) local Summ = getCreaturePosition(getCreatureSummons(cid)[1]) doSendMagicEffect(Summ, 49) end esse eu acho que funcionar
  16. Gostei
    izac ximenes deu reputação a Jonathan Pires em Sprites [PxG]   
    Contem: Espeon, Flareon, Jolteon, Gallade, Heracross, Kangaskhan, Miltank, Rhydon, Mr. Mime, Snorlax, Togekiss, Umbreon e entre outros em formato obd.
    Obs: Está faltando alguns corpses.
     
    Print:

     
     
    Download: Mega
     
     
     
    Créditos: PxG - PAdventures
  17. Gostei
    izac ximenes deu reputação a Shawii em AutoComplete e Highlight TFS para Notepad++   
    Edit: não sei se estou na sessão certa, sou novo por aqui, se não estiver por favor me mova   
     
    E ae!
     
    Fazia um bom tempo que não mexia com OT scripting,
    então para me ajudar, fiz um autocomplete e Highlight (marca as funções com cores diferentes) das funções que achei no tópico Lista de Funções LUA
     
    Não é uma coisa que se diga "NOOOSSA QUE FODA MALUCO DO CÉU", mas pode ajudar algumas pessoas que assim como eu não estão  acostumadas com o nome das funções do TFS.
     
    Parte 1 - Adicionar o Autocomplete:
    Para adicionar o autocomplete basta pegar esse código:



     
    - Vá até o diretório Notepad++\plugins\APIs na pasta onde foi instalado o notepad++
    - Copie qualquer arquivo
    - Renomeie o novo arquivo para lua
    - Substitua seu conteúdo pelo código acima
     
     
    Pronto, agora é só ativar o autocomplete no notepad++ (caso ainda não esteja ativado, vem off por padrão)
     
    Com o programa aberto entre em Configurações > Preferências > Auto Completar
    - Marque a opção "Habilitar Auto Completar para cada entrada"
    - Marque a opção "Function and word completion"
     
     
    e PRONTO autocomplete adicionado com sucesso!
     
     
     
    Parte 2 - Adicionar o highlight (marcar as funções com cores diferentes)
     
    - Copie o conteúdo desse spoiler



     
    - Abra o notepad++ e entre em Configurações > Configurador de estilos
    - Observe a screenshot e acompanhe os passos:
    No menu Linguagem selecione a opção: LUA No menu Local do Estilo selecione a opção: FUNC1 Cole o conteúdo do spoiler no campo "Palavras chave definidas pelo usuário"  que está em Branco. Altere a cor se desejar  

     
    Clique em salvar & fechar e PRONTO, você adicionou cor ao seu código tornando seu dia como scripter muito mais bonito organizado e gay.
     
     
    Conforme eu for descobrindo o que cada função faz e seus parâmetros (obrigatórios e opcionais) vou ir documentando pra depois fazer um autocomplete com descrições das funções, quando tiver um bom conteudo nesse sentido volto a postar pra vcs, abraço!
  18. Gostei
    izac ximenes 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.
  19. Gostei
    izac ximenes deu reputação a Orochi Elf em [Duvida]Alguem da uma olhadinha nesse script e diz erro dele   
    Amigo, seguinte. Não use mais cores como esse verde, dificulta a leitura.
     
    Bom, eu fiz um código simples que se o player tiver algum summon, ele irá retornar o target para este summon.
     

    for s = 1, #getCreatureSummons(cid) do     if getCreatureSummons(cid)[s] then                  target = getCreatureSummons(cid)[s]         break     end end  
    Basta implantar nas magias.
  20. Gostei
    izac ximenes deu reputação a Orochi Elf em [OTC] OTRestarter v0.2   
    ~~ Atualizado! ~~ [OTCodes] OTRestarter v0.2
     
    Salve galera do TibiaKing, hoje venho apresentar pra vocês um OTRestarter super básico, simples e funcional.
    Bom.. eu fiz um pequeno "upgrade" nele e estarei postando aqui para vocês a versão.
    Eu não encontrei nenhum tipo de BUG, porém caso vocês encontrem, porfavor reportar.
     
    OBS: Para o programa funcionar, ele precisa estar na pasta do servidor, como mostra no vídeo abaixo.
     
    - Mini LOG
    A cada vez, que o servidor for reiniciado o programa avisa na aba "Log", a hora e a data que o servidor foi reiniciado.
    Novo visual (MephTheme)

     
    Vídeo demonstrativo da versão 0.1 ~~ Mesmo modo de uso ~~
    http://www.youtube.com/watch?v=YfMSBKSB3Es&feature=youtu.be
     
     
    Download do programa está anexado ao tópico.
     
    OTC OTRestarter v0.2.rar
  21. Gostei
    izac ximenes recebeu reputação de Drawnins em [8.54]Erondino v15 com source   
    Download:



    Desculpe por nao coloca scan to sem tempo alguem pode fazer isso por min,mais e 100% confiavel peguei direto da pagina do erondino site
    Creditos:
    Erondino pelo serve
  22. Gostei
    izac ximenes deu reputação a KilleRAnjOo em Como adiciono Fly ou Surf em algum Pokémon?   
    1: Abra dat editor ou Object Builder
     
    2: va no Pokemon q vc quer adiconar surf.fly ou ride   Print>>>http://prntscr.com/56ln9r
    ,
    Eu peguei O do elder
     
    Imagem q o Elder charizard esta no fly
     
    Numero dele e 646  pra adiconar ele no fly vai em  Data/lib/cofiguraton.lua
     va ate
     
     
    flys = {              
    ["Moltres"] = {229, 2300}, -- moltres
    ["Articuno"] = {230, 2100}, -- artic
    ["Zapdos"] = {224, 2600}, -- zapdos
    ["Mew"] = {232, 2200}, -- 1000
    ["Mewtwo"] = {233, 2200},-- two
    ["Dragonite"] = {221, 1300},-- nite
    ["Pidgeot"] = {222, 900}, -- geot
    ["Fearow"] = {226, 800}, -- fearow
    ["Aerodactyl"] = {227, 1100}, -- aero
    ["Charizard"] = {216, 1000}, -- chari
    ["Porygon"] = {316, 600}, -- porygon
    ["Shiny Dragonite"] = {1020, 1300},-- Shiny nite
    ["Shiny Pidgeot"] = {996, 900}, -- Shiny geot
    ["Shiny Fearow"] = {997, 800}, -- Shiny fearow          
    ["Elder Charizard] = {295, 1000}, -- Elder chari  <<<<<<<<<<<<<<<,,,
    ["Porygon2"] = {648, 890}, -- 2
    ["Crobat"] = {652, 1190}, -- crobat
    ["Dragonair"] = {1112, 1150},
    ["Shiny Dragonair"] = {1113, 1400},
    ["Noctowl"] = {994, 1000},
    ["Farfetch'd"] = {1120, 1000},  
    ["Shiny Farfetch'd"] = {1121, 1000},
    ["Gengar"] = {1123, 1000},
    ["Shiny Gengar"] = {1124, 1000},
    ["Heracross"] = {1125, 1000},
    ["Xatu"] = {1122, 1000},
    ["Shiny Salamence"] = {1198, 9000},
    ["Shiny Tropius"] = {1154, 9000},
    ["Flygon"] = {1190, 3000},
    ["Salamence"] = {1162, 3000},
    ["Tropius"] = {1155, 3000},
    }
     
    Explicaçao :["Elder Charizard"] = {295, 1000}, -- Elder chari
    Explicaçao:["Nome do Poke"] = {Numero da foto do poke - 351 q deu 295, Speed quando estiver voando }, -- Elder chari
                                                         /\ No meu era do elder entao eu subtrai 646-351=295
     
     
    OBS: sempre tirar 351 da imagem   ex:646 - 351 =295 q nem ta de vermelho
     
    Mals se nao deu pra explicar melhor e q tou fazendo um negocio
     
    Se ajudei rep + Vlw
  23. Gostei
    izac ximenes deu reputação a Featzen em [Duvida]o que tem de erra no script   
    Seguindo sua lógica, você deve querer algo como:
    function onUse(cid, item, fromPosition, itemEx, toPosition) local daysvalue = 30 local time = os.time() + (daysvalue * 86400000) -- 86400000 é um dia em milisegundos if getPlayerStorageValue(cid,55341) < os.time then  setPlayerStorageValue(cid, 55342,time) setPlayerStorageValue(cid,55341,time) doPlayerRemoveItem(cid, 9004, 1) doPlayerSendTextMessage(cid, 22, "agora você pode si teleporta sem tempo") else doPlayerSendCancel(cid,"você ja esta usando") end end Mas eu recomendo usar exhaustions.
    function onUse(cid, item, fromPosition, itemEx, toPosition) local daysvalue = 30 local time = os.time() + (daysvalue * 86400000) -- 86400000 é um dia em milisegundos if not exhaustion.check(cid, 55341) then  setPlayerStorageValue(cid, 55342,time) doPlayerRemoveItem(cid, 9004, 1) doPlayerSendTextMessage(cid, 22, "agora você pode si teleporta sem tempo") exhaustion.set(cid, 55341, (daysvalue * 86400)) else doPlayerSendCancel(cid,"você ja esta usando") end end Não sei como está usando o storage 55432, então fica assim.
  24. Gostei
    izac ximenes recebeu reputação de Orochi Elf em [Pedido] Imagem para perfil   
    esse fica legal
  25. Gostei
    izac ximenes deu reputação a Beeny em [Duvida]erro na função php   
    Acho que isso é pq a versão do xampp está bem desatualizada.
     
    Tenta o script assim :
    <?php error_reporting(0); ini_set(“display_errors”, 0 ); class shop { function connect() { $ots = POT::getInstance(); $ots->connect(POT::DB_MYSQL, connection()); return $ots->getDBHandle(); } function isInstalled() { require('config.php'); $con = mysql_connect($config['database']['host'], $config['database']['login'], $config['database']['password']); mysql_select_db($config['database']['database'],$con); if(mysql_query("SELECT * FROM shop_offer,shop_history")) return true; else return false; } function points($account) { $SQL = $this->connect(); $points = $SQL->query('SELECT premium_points FROM accounts WHERE name = "'.$account.'"')->fetch(); return $points['premium_points']; } function getPlayerAccount($name) { $SQL = $this->connect(); $player = $SQL->query('SELECT account_id FROM players WHERE name = "'.$name.'"')->fetch(); return $SQL->query('SELECT * from accounts WHERE id = '.$player['account_id'].''); } function AddPremium($name,$days) { $SQL = $this->connect(); $account = $this->getPlayerAccount($name)->fetch(); return $SQL->query('UPDATE accounts SET premdays = (premdays + '.$days.') WHERE name = "'.$account['name'].'"'); } function CharacterList($account) { $SQL = $this->connect(); $id = $SQL->query('SELECT id FROM accounts WHERE name = "'.$account.'"')->fetch(); return $SQL->query('SELECT * FROM players WHERE account_id = '.$id['id'].''); } function isOnline($name) { $SQL = $this->connect(); $player = $SQL->query('SELECT online FROM players WHERE name = "'.$name.'"')->fetch(); return $player['online']; } function isBanned($name) { $SQL = $this->connect(); $ID = $this->getPlayerAccount($name)->fetch(); return $SQL->query('SELECT * FROM bans WHERE value = '.$ID['id'].''); } function UnBan($name) { $SQL = $this->connect(); $ID = $this->getPlayerAccount($name)->fetch(); return $SQL->query('DELETE FROM bans WHERE value = '.$ID['id'].''); } function execute_file($file) { if (!file_exists($file)) { $this->last_error = "The file $file does not exist."; return false; } $str = file_get_contents($file); if (!$str) { $this->last_error = "Unable to read the contents of $file."; return false; } // split all the queries into an array $quote = ''; $line = ''; $sql = array(); $ignoreNextChar = ''; for ($i = 0; $i < strlen($str); $i++) { if ( !$ignoreNextChar ) { $char = substr($str, $i, 1); $line .= $char; if ($char == ';' && $quote == '') { $sql[] = $line; $line = ''; } else if ( $char == '\\' ) { // Escape char; ignore the next char in the string $ignoreNextChar = TRUE; } else if ($char == '"' || $char == "'" || $char == '`') { if ( $quote == '' ) // Start of a new quoted string; ends with same quote char $quote = $char; else if ( $char == $quote ) // Current char matches quote char; quoted string ends $quote = ''; } } else $ignoreNextChar = FALSE; } if ($quote != '') return false; foreach ($sql as $query) { if (!empty($query)) { $r = mysql_query($query); if (!$r) { $this->last_error = mysql_error(); return false; } } } return true; } function install() { $SQL = $this->connect(); if ($this->isInstalled()) return false; else return $this->execute_file("gifts/config/Shop.sql"); } } ?> Só para falar, não tenho certeza de que vai funcionar.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo