Ir para conteúdo

FlamesAdmin

Infante
  • Total de itens

    1550
  • Registro em

  • Última visita

  • Dias Ganhos

    19

Histórico de Reputação

  1. Upvote
    FlamesAdmin recebeu reputação de lSainty em [PDA] Pokeball Icon System   
    Não existe tutorial sobre o mesmo por aí, então venho aqui postar um.
     
    Pra começar, primeiramente vamos a pasta actions. Adicione um novo arquivo .lua com nome icons
    Agora crie um nome de iconsDP na mesma pasta
    Em actions.xml adicione as tags
    <action itemid="11989" event="script" value="icons.lua"/> <action itemid="2589" event="script" value="iconsDP.lua"/> Já adiantando ainda em actions.xml não se esqueça de adicionar os IDS dos icons na tag do goback.lua
     
    Vamos ao login.lua da pasta creaturescripts. Antes do último return true adicione isso
    doPlayerChangeModeIcon(cid) Ficando 
    doPlayerChangeModeIcon(cid) return true end  
    Vamos a pasta lib agora. Adicione um arquivo .lua com nome de iconsSystem e coloque isso dentro
    Agora adicione outro .lua e com nome de iconsTable e cole isso dentro
     
    LEMBRANDO: Não se esqueçam de trocar os ids de cada pokemon e icon no arquivo iconTable da pasta lib
     
    Vamos agora no some functions.lua na mesma pasta e procure por function addPokeToPlayer
    Abaixo de local happy = 250, adicione 
    if icons[pokemon] then id = icons[pokemon].on else id = pokeballs[btype].on end Abaixo de doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") 
    Adicione:
    doItemSetAttribute(item, "defeated", "no") doItemSetAttribute(item, "ball", btype) Vamos em catch system.lua na mesma pasta e procure por 
    if not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 then setPlayerStorageValue(cid, 54843, 1) else setPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1) end Adicione isso embaixo:
    if icons[poke] then ballid = icons[poke].on end Abaixo de doItemSetAttribute(item, "hands", 0) adicione
    doItemSetAttribute(item, "morta", "no") doItemSetAttribute(item, "Icone", "yes") doItemSetAttribute(item, "ball", "Icone") Abaixo do end da função citada acima, também adicione:
    doItemSetAttribute(item, "morta", "no") doItemSetAttribute(item, "Icone", "yes") doItemSetAttribute(item, "ball", "Icone") Abaixo de setPlayerStorageValue(cid, 854788, 'done'), também adicione
    doItemSetAttribute(item, "morta", "no") doItemSetAttribute(item, "Icone", "yes") doItemSetAttribute(item, "ball", "Icone") Abaixo do end da função acima, também adicione
    doItemSetAttribute(item, "morta", "no") doItemSetAttribute(item, "Icone", "yes") doItemSetAttribute(item, "ball", "Icone") Abaixo de if getPlayerFreeCap(cid) >= 6 then também adicione
    doItemSetAttribute(item, "morta", "no") doItemSetAttribute(item, "Icone", "yes") doItemSetAttribute(item, "ball", "Icone")  
    Vamos rapidamente na pasta talkactions dentro do arquivo createpokeball.lua troque o seu por esse:
     
    Voltamos para pasta actions e no arquivo evolution.lua procure por if getPokemonName(item2.uid) == "Eevee" then
    Adicione abaixo de doEvolvePokemon(cid, item2, eevee, 0, 0)
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Agora procure por doEvolvePokemon(cid, item2, theevo, evolution, water) e adicione logo abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, theevo, water, punch) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, theevo, water, king) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, theevo, evolution, leaf) e adiciona abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, "Vileplume", leaf, leaf) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, "Bellossom", sun, leaf) e adiciona abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, "Slowbro", enigma, 0) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, "Slowking", king, 0) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, evolution, punch, 0) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, evo, stnid, stnid2) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) No seu script de pokémon inicial (ex: starter.lua) na pasta actions, em local btype troque por local btype = "Icone"
     
    Em items.xml vamos adicionar os IDS dos icons que você criou no ItemEditor
    Cada icone (vivo, usando e morta) precisa de uma tag para eles no items.xml
    Sim, vocês terão que criar cada pokemon para cada icon. Essa é a parte mais chata
     
    Agora vamos em movements.xml na tag do portrait.lua e adicionar todos os itens dos icons no mesmo nas duas linhas do portrait.lua
     
    Vamos rapidamente na pasta npcs de preferencia nos npcs de clan ou algum outro que troque pokémon no arquivo .lua deles
    Em todos eles possue essa linha doTransformItem(getPlayerSlotItem(cid, 7).uid, fotos["Shiny "..name]) e abaixo dela vocês adicionem
    doItemSetAttribute(pb, "Icone", "yes") doTransformItem(pb, icons[getItemAttribute(pb, "poke")].on)  
     
    Espero que eu não tenha esquecido de alguma parte.
    Bom proveito
     
    Sistema não foi feito por mim massss... Não sei a quem dar os créditos
    FUI
  2. Upvote
    FlamesAdmin recebeu reputação de Taiger em [PDA] Pokeball Icon System   
    Não existe tutorial sobre o mesmo por aí, então venho aqui postar um.
     
    Pra começar, primeiramente vamos a pasta actions. Adicione um novo arquivo .lua com nome icons
    Agora crie um nome de iconsDP na mesma pasta
    Em actions.xml adicione as tags
    <action itemid="11989" event="script" value="icons.lua"/> <action itemid="2589" event="script" value="iconsDP.lua"/> Já adiantando ainda em actions.xml não se esqueça de adicionar os IDS dos icons na tag do goback.lua
     
    Vamos ao login.lua da pasta creaturescripts. Antes do último return true adicione isso
    doPlayerChangeModeIcon(cid) Ficando 
    doPlayerChangeModeIcon(cid) return true end  
    Vamos a pasta lib agora. Adicione um arquivo .lua com nome de iconsSystem e coloque isso dentro
    Agora adicione outro .lua e com nome de iconsTable e cole isso dentro
     
    LEMBRANDO: Não se esqueçam de trocar os ids de cada pokemon e icon no arquivo iconTable da pasta lib
     
    Vamos agora no some functions.lua na mesma pasta e procure por function addPokeToPlayer
    Abaixo de local happy = 250, adicione 
    if icons[pokemon] then id = icons[pokemon].on else id = pokeballs[btype].on end Abaixo de doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") 
    Adicione:
    doItemSetAttribute(item, "defeated", "no") doItemSetAttribute(item, "ball", btype) Vamos em catch system.lua na mesma pasta e procure por 
    if not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 then setPlayerStorageValue(cid, 54843, 1) else setPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1) end Adicione isso embaixo:
    if icons[poke] then ballid = icons[poke].on end Abaixo de doItemSetAttribute(item, "hands", 0) adicione
    doItemSetAttribute(item, "morta", "no") doItemSetAttribute(item, "Icone", "yes") doItemSetAttribute(item, "ball", "Icone") Abaixo do end da função citada acima, também adicione:
    doItemSetAttribute(item, "morta", "no") doItemSetAttribute(item, "Icone", "yes") doItemSetAttribute(item, "ball", "Icone") Abaixo de setPlayerStorageValue(cid, 854788, 'done'), também adicione
    doItemSetAttribute(item, "morta", "no") doItemSetAttribute(item, "Icone", "yes") doItemSetAttribute(item, "ball", "Icone") Abaixo do end da função acima, também adicione
    doItemSetAttribute(item, "morta", "no") doItemSetAttribute(item, "Icone", "yes") doItemSetAttribute(item, "ball", "Icone") Abaixo de if getPlayerFreeCap(cid) >= 6 then também adicione
    doItemSetAttribute(item, "morta", "no") doItemSetAttribute(item, "Icone", "yes") doItemSetAttribute(item, "ball", "Icone")  
    Vamos rapidamente na pasta talkactions dentro do arquivo createpokeball.lua troque o seu por esse:
     
    Voltamos para pasta actions e no arquivo evolution.lua procure por if getPokemonName(item2.uid) == "Eevee" then
    Adicione abaixo de doEvolvePokemon(cid, item2, eevee, 0, 0)
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Agora procure por doEvolvePokemon(cid, item2, theevo, evolution, water) e adicione logo abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, theevo, water, punch) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, theevo, water, king) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, theevo, evolution, leaf) e adiciona abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, "Vileplume", leaf, leaf) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, "Bellossom", sun, leaf) e adiciona abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, "Slowbro", enigma, 0) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, "Slowking", king, 0) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, evolution, punch, 0) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) Procure por doEvolvePokemon(cid, item2, evo, stnid, stnid2) e adicione abaixo
    local ball = getPlayerSlotItem(cid, 8).uid doItemEraseAttribute(ball, "boost") doItemSetAttribute(ball, "morta", "no") doItemSetAttribute(ball, "Icone", "yes") doTransformItem(ball, icons[getItemAttribute(ball, "poke")].use) No seu script de pokémon inicial (ex: starter.lua) na pasta actions, em local btype troque por local btype = "Icone"
     
    Em items.xml vamos adicionar os IDS dos icons que você criou no ItemEditor
    Cada icone (vivo, usando e morta) precisa de uma tag para eles no items.xml
    Sim, vocês terão que criar cada pokemon para cada icon. Essa é a parte mais chata
     
    Agora vamos em movements.xml na tag do portrait.lua e adicionar todos os itens dos icons no mesmo nas duas linhas do portrait.lua
     
    Vamos rapidamente na pasta npcs de preferencia nos npcs de clan ou algum outro que troque pokémon no arquivo .lua deles
    Em todos eles possue essa linha doTransformItem(getPlayerSlotItem(cid, 7).uid, fotos["Shiny "..name]) e abaixo dela vocês adicionem
    doItemSetAttribute(pb, "Icone", "yes") doTransformItem(pb, icons[getItemAttribute(pb, "poke")].on)  
     
    Espero que eu não tenha esquecido de alguma parte.
    Bom proveito
     
    Sistema não foi feito por mim massss... Não sei a quem dar os créditos
    FUI
  3. Thanks
    FlamesAdmin recebeu reputação de vinicius231 em [RME] Deixando montanha com Auto-Border   
    Boa tarde, irei mostrar como deixar a montanha com auto-border nos pisos.



    Vá até a pasta do seu RME, abra o arquivo grounds.xml da versão que você utiliza, procure por:


    <brush name="mountain" type="ground"

    Ele vai estar assim:



    <brush name="mountain" type="ground" server_lookid="918" z-order="9900">
    <item id="919" chance="1"/>


    <border align="inner" to="icy mountain" id="53"/>
    <border align="inner" to="snowy mountain" id="53"/>
    <border align="inner" to="none" id="3"/>
    <border align="outer" to="none" id="51"/>
    <border align="outer" id="10"/>
    <border align="inner" id="3"/>
    <optional id="29"/>
    </brush>


    Substitua por esse:


    <brush name="mountain" type="ground" server_lookid="918" z-order="9900">
    <item id="919" chance="1"/>

    <border align="inner" to="icy mountain" id="53"/>
    <border align="inner" to="snowy mountain" id="53"/>
    <border align="outer" to="none" id="29"/>
    <border align="outer" id="29"/>
    <optional id="29"/>
    </brush>
    Demonstração:

    Antes sem editar



    Depois com a edição





    Simples.

    Até logo!!!

  4. Upvote
    FlamesAdmin recebeu reputação de spoockk em [OPEN-SOURCE] POKEMASTERX   
    modules/client/client.lua procure por 
    g_window.setTitle(g_app.getName()) e troque por
    g_window.setTitle('NOME QUE APARECERÁ') e em modules/client_background/background.lua
    clientVersionLabel:setText(g_app.getName() .. ' ' .. g_app.getVersion() .. '\n' .. 'Rev ' .. g_app.getBuildRevision() .. ' ('.. g_app.getBuildCommit() .. ')\n' .. 'Built on ' .. g_app.getBuildDate()) deixe assim
    --clientVersionLabel:setText(g_app.getName() .. ' ' .. g_app.getVersion() .. '\n' .. --'Rev ' .. g_app.getBuildRevision() .. ' ('.. g_app.getBuildCommit() .. ')\n' .. --'Built on ' .. g_app.getBuildDate())  
  5. Thanks
    FlamesAdmin recebeu reputação de Kooask em [Resolvido] Trocar AURAS POKETIBIA   
    se vc quer um effect e o numero dele é 200, vc precisa colocar o effect 199. Sempre diminuindo 1
  6. Upvote
    FlamesAdmin deu reputação a BlazerX em [OTC] Trainer Card   
    Trainer Card
    Fala galera do Xtibia, vim trazer mais uma contribuição para a comunidade, é um módulo para otclient básico porém legal.
     

     
    Como funciona?
    O Trainer Card vai mostrar digamos algumas informações do seu personagem, 
    você pode adicionar mais informações a esse card, vai da criatividade de cada um deixar bem funcional.
     

     
    Script do servidor:
    Crique um arquivo na pasta do seu servidor em data/creaturescript/ e coloque o nome de trainercard.lua
     
    Coloque a seguinte tag no arquivo do creaturescripts.xml:
    <event type="extendedopcode" name="TrainerCard" event="script" value="trainercard.lua"/> Registre o evento no arquivo onLogin.lua onde se encontra na mesma pasta:
    registerCreatureEvent(cid, "TrainerCard")
     
    Módulo otClient:
    Coloque o módulo na pasta do seu otClient em modules/ 
    Para abrir o módulo pressione a tecla Ctrl+Shift+Q
     

     
    Imagem do módulo:

     

     
    A base que foi utilizada do servidor foi a DarkXPoke.
    O meu módulo tem mais informações do que o da imagem, porém eu dei uma mexida,
    o módulo que o Gengo me passou do Trainer Card que eu utilizo está em um nivel totalmente
    diferente do apresentado nesse tutorial, eu só modifiquei para compartilhar com a galera.
    Espero que tenham gostado e faça um bom proveito do módulo, use sua criatividade para fazer de um belo sistema funcional.
     

     
    Créditos:
     
  7. Upvote
    FlamesAdmin deu reputação a zipter98 em [Resolvido] [Pedido] Script Para Pda   
    Um amigo me pediu este sisteminha alguns dias atrás. Como poderá ver, é algo bem simples. Entretanto, ele pode conflitar com outras mudanças de outfit que o pokémon venha sofrer. Para evitar isso, você terá de fazer algumas mudanças adicionais, explicadas adiante.
    Primeiramente, em algum arquivo da lib:
    outfits_order = { --["nome_do_pokemon"] = {outfit1, outfit2, outfit3, ...}, } function doTradeOutfit(cid, index) if not isSummon(cid) then return true end local outfit = outfits_order[getCreatureName(cid)] if not outfit[index] then index = 1 end doSetCreatureOutfit(cid, {lookType = outfit[index]}, -1) addEvent(doTradeOutfit, 200, cid, index + 1) end As outfits devem ser configuradas na ordem em que serão trocadas. O resto dependerá de onde a função será chamada. Se a animação do pokémon começar logo após ele ter sido chamado da pokébola, então, em goback.lua (data/actions/scripts): Abaixo de: local pk = getCreatureSummons(cid)[1] if not isCreature(pk) then return true end Coloque: if outfits_order[getCreatureName(pk)] then doTradeOutfit(pk, 1) end Se formos seguir a lógica da gif demonstrada, a função deveria ser chamada após a mega evolução, o que dependeria de como o sistema usado por você foi escrito. Usando o meu, o processo seria o seguinte: Em pokemon moves.lua (data/lib), no código da spell Mega Evolution: Abaixo de: adjustStatus(newPoke, ball, true, false) coloque: if outfits_order[getCreatureName(newPoke)] then doTradeOutfit(newPoke, 1) end Caso os pokémons que façam parte do sistema de mudança constante de outfit possam ter sua looktype alterada de alguma maneira durante o jogo (por exemplo, um Mega Charizard X usando Outrage ou uma Rapidash usando Blue Flames), você deverá fazer algumas pequenas mudanças. Troque a função que passei anteriormente por essa: function doTradeOutfit(cid, index) if not isSummon(cid) then return true end local outfit = outfits_order[getCreatureName(cid)] if not getCreatureCondition(cid, CONDITION_OUTFIT) or isInArray(outfit, getCreatureOutfit(cid).lookType) then if not outfit[index] then index = 1 end doSetCreatureOutfit(cid, {lookType = outfit[index]}, -1) end addEvent(doTradeOutfit, 200, cid, index + 1) end Depois, no código de todos os possíveis fatores que possam mudar a outfit dos pokémons participantes do sistema, acima da linha responsável pela alteração na looktype: doSetCreatureOutfit(...) Coloque isso: if getCreatureCondition(cid, CONDITION_OUTFIT) then doRemoveCondition(cid, CONDITION_OUTFIT) end Sinceramente, acho que você só terá de fazer isso em pouquíssimos códigos.
    Por gentileza, poste um feedback do sistema. Assim, saberei se devo ou não mover o tópico.
  8. Upvote
    FlamesAdmin deu reputação a JulianoZN em [TFS 0.3.6] Campo de visão > Max view Tiles   
    Obs: ja tem tutoriais aqui no xtibia porem estão tendo problemas entao vamos lá
    Antes de começar lembre-se esse codigo nao da de usar o old cliente depois
     
    Oque Precisa ?
    Source do Servidor  e    Source do OtClient
     
    Source usada: 
     
    Para nao dar bug na hora de subir escada ou desce, aumente o máximo de tiles que poderá ser carregado
    const.h
    procure por #define NETWORKMESSAGE_MAXSIZE 15360 mude para #define NETWORKMESSAGE_MAXSIZE valor que voce quer <OBS isso e para a quantidade de pixel será possivel receber sem bugar> #define NETWORKMESSAGE_MAXSIZE 1000000000 --- Valor que coloquei no meu  
    protocalgame.cpp
     
    procure por
    bool ProtocolGame::canSee(uint16_t x, uint16_t y, uint16_t z) const { #ifdef __DEBUG__ if(z < 0 || z >= MAP_MAX_LAYERS) std::cout << "[Warning - ProtocolGame::canSee] Z-value is out of range!" << std::endl; #endif const Position& myPos = player->getPosition(); if(myPos.z <= 7) { //we are on ground level or above (7 -> 0), view is from 7 -> 0 if(z > 7) return false; } else if(myPos.z >= 8 && std::abs(myPos.z - z) > 2) //we are underground (8 -> 15), view is +/- 2 from the floor we stand on return false; //negative offset means that the action taken place is on a lower floor than ourself int32_t offsetz = myPos.z - z; return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) && (y >= myPos.y - 6 + offsetz) && (y <= myPos.y + 7 + offsetz)); }  
    Substitua por
     
    bool ProtocolGame::canSee(uint16_t x, uint16_t y, uint16_t z) const { #ifdef __DEBUG__ if(z < 0 || z >= MAP_MAX_LAYERS) std::cout << "[Warning - ProtocolGame::canSee] Z-value is out of range!" << std::endl; #endif const Position& myPos = player->getPosition(); if(myPos.z <= 7) { //we are on ground level or above (7 -> 0), view is from 7 -> 0 if(z > 7) return false; } else if(myPos.z >= 8 && std::abs(myPos.z - z) > 2) //we are underground (8 -> 15), view is +/- 2 from the floor we stand on return false; //negative offset means that the action taken place is on a lower floor than ourself int32_t offsetz = myPos.z - z; return ((x >= myPos.x - Map::maxClientViewportX + offsetz) && (x <= myPos.x + (Map::maxClientViewportX+1) + offsetz) && (y >= myPos.y - Map::maxClientViewportY + offsetz) && (y <= myPos.y + (Map::maxClientViewportY+1) + offsetz)); }  
    procure por
    if(newPos.z > oldPos.z) MoveDownCreature(msg, creature, newPos, oldPos, oldStackpos); else if(newPos.z < oldPos.z) MoveUpCreature(msg, creature, newPos, oldPos, oldStackpos); if(oldPos.y > newPos.y) // north, for old x { msg->AddByte(0x65); GetMapDescription(oldPos.x - 8, newPos.y - 6, newPos.z, 18, 1, msg); } else if(oldPos.y < newPos.y) // south, for old x { msg->AddByte(0x67); GetMapDescription(oldPos.x - 8, newPos.y + 7, newPos.z, 18, 1, msg); } if(oldPos.x < newPos.x) // east, [with new y] { msg->AddByte(0x66); GetMapDescription(newPos.x + 9, newPos.y - 6, newPos.z, 1, 14, msg); } else if(oldPos.x > newPos.x) // west, [with new y] { msg->AddByte(0x68); GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg); } } } } Substitua por
    if(newPos.z > oldPos.z) MoveDownCreature(msg, creature, newPos, oldPos, oldStackpos); else if(newPos.z < oldPos.z) MoveUpCreature(msg, creature, newPos, oldPos, oldStackpos); if (oldPos.y > newPos.y) { // north, for old x msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } else if (oldPos.y < newPos.y) { // south, for old x msg->AddByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y + (Map::maxClientViewportY+1), newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } if (oldPos.x < newPos.x) { // east, [with new y] msg->AddByte(0x66); GetMapDescription(newPos.x + (Map::maxClientViewportX+1), newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } else if (oldPos.x > newPos.x) { // west, [with new y] msg->AddByte(0x68); GetMapDescription(newPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } } } }  
    Procure por
    ////////////// Add common messages void ProtocolGame::AddMapDescription(NetworkMessage_ptr msg, const Position& pos) { msg->AddByte(0x64); msg->AddPosition(player->getPosition()); GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); }  
    Substitua por
    ////////////// Add common messages void ProtocolGame::AddMapDescription(NetworkMessage_ptr msg, const Position& pos) { msg->AddByte(0x64); msg->AddPosition(player->getPosition()); GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg); }  
    Procure por
    void ProtocolGame::MoveUpCreature(NetworkMessage_ptr msg, const Creature* creature, const Position& newPos, const Position& oldPos, uint32_t oldStackpos) { if(creature != player) return; msg->AddByte(0xBE); //floor change up if(newPos.z == 7) //going to surface { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 5, 18, 14, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 4, 18, 14, 4, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 3, 18, 14, 5, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 2, 18, 14, 6, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 1, 18, 14, 7, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 0, 18, 14, 8, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } else if(newPos.z > 7) //underground, going one floor up (still underground) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.z - 3, 18, 14, 3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - 8, oldPos.y + 1 - 6, newPos.z, 1, 14, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg); }  
    Substitua por
    void ProtocolGame::MoveUpCreature(NetworkMessage_ptr msg, const Creature* creature, const Position& newPos, const Position& oldPos, uint32_t oldStackpos) { if(creature != player) return; msg->AddByte(0xBE); //floor change up if(newPos.z == 7) //going to surface { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 5, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 4, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 4, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 5, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 6, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 7, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 0, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 8, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } else if(newPos.z > 7) //underground, going one floor up (still underground) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.z - 3, (Map::maxClientViewportX+1), (Map::maxClientViewportY+1)*2, 3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } Procure por
    void ProtocolGame::MoveDownCreature(NetworkMessage_ptr msg, const Creature* creature, const Position& newPos, const Position& oldPos, uint32_t oldStackpos) { if(creature != player) return; msg->AddByte(0xBF); //floor change down if(newPos.z == 8) //going from surface to underground { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 14, -1, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 1, 18, 14, -2, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) //going further down { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } //moving down a floor makes us out of sync //east msg->AddByte(0x66); GetMapDescription(oldPos.x + 9, oldPos.y - 1 - 6, newPos.z, 1, 14, msg); //south msg->AddByte(0x67); GetMapDescription(oldPos.x - 8, oldPos.y + 7, newPos.z, 18, 1, msg); } Substitua por
    void ProtocolGame::MoveDownCreature(NetworkMessage_ptr msg, const Creature* creature, const Position& newPos, const Position& oldPos, uint32_t oldStackpos) { if(creature != player) return; msg->AddByte(0xBF); //floor change down if(newPos.z == 8) //going from surface to underground { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -1, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -2, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) //going further down { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } //moving down a floor makes us out of sync //east msg->AddByte(0x66); GetMapDescription(oldPos.x + Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); //south msg->AddByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y + Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); }  
    Agora no Map.h
    Procure por
    static const int32_t maxViewportX = 11; //min value: maxClientViewportX + 1 static const int32_t maxViewportY = 11; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 8; static const int32_t maxClientViewportY = 6;  
    Substitua por
    static const int32_t maxViewportX = 15; //min value: maxClientViewportX + 1 static const int32_t maxViewportY = 15; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 14; static const int32_t maxClientViewportY = 8;  
    Agora no map.cpp do Otclient
    Procure por
    void Map::resetAwareRange() { AwareRange range; range.left = 8; range.top = 6; range.bottom = 7; range.right = 9; setAwareRange(range); } Substitua por
    { AwareRange range; range.left = 15; //Change this to = maxClientViewportX range.top = 15; //Change this to = maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); } ou por { AwareRange range; range.left = 14; //Change this to = maxClientViewportX range.top = 8; //Change this to = maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); }  
  9. Upvote
    FlamesAdmin deu reputação a Gengo em [OtClient] Mensagem Personalizada   
    Hoje venho trazer um sistema que pode deixar seu servidor com um diferencial dos demais, espero que vocês possam aprender algo com esse sistema e criar outros tipos de personalização nas mensagens.
     
     
    O que seria essa personalização?
    Seria uma personalização da mensagem do broadcast, em vez de ficar aquela mensagem vermelha no meio da tela, você pode escolher sua própria cor para a mensagem, no fim do tópico demonstrarei com imagens para que você possa entender melhor.
     
     
    Script:
    Procure pela pasta no seu otclient em modules/game_textmessage e abra o arquivo textmessage.otui e substitua por esse:
     
    Agora na mesma pasta abra o arquivo textmessage.lua e procure pela função displayMessage e debaixo de:
    if msgtype == MessageSettings.none then return end Coloque o seguinte script:
     
     
     Feito essas alterações a personalização já deve estar funcionando, para testar você pode utilizar o seguinte comando:
     
    /bc green | O torneio mundial da Elite Four se iniciará em 15min. → Onde /bc é o comando broadcast 
    → green é a cor que deseja personalizar, pode ser tanto em hexa como o nome da cor 
    → mensagem qualquer
    → É necessário colocar o pipeline |  caso queira colocar uma outra cor, senão ele assumirá como padrão a cor vermelha do broadcast.
     
    Caso você não tenha o script do broadcast, porem é impossivel não ter já que é padrão nos servidores, vou deixar disponível aqui:
     
     
    Imagens de como fica in-game:
     
    Eai, vai ficar de fora? 
    Implemente já essa personalização e torne-se um servidor diferenciado dos demais.
  10. Upvote
    FlamesAdmin deu reputação a BlazerX em Security House [OtPokemon]   
    Security House
    Fala galera do Xtibia, como minha primeira de muitas contribuições, hoje venho trazer para vocês um sistema bem bacana visto no otPokemon.
     

     
    Como funciona?
    Basicamente o script não deixa que outras pessoas invitado nas houses pegue seus itens,
    somente o dono ou alguém invitado com aleta som pode pegar os itens da house.
     

     
    Script:
    Coloque na posta do seu servidor em data/creaturescript/ e coloque o nome securityHouse.lua
     
     
    Coloque a seguinte tag no arquivo do creaturescripts.xml:
    <event type="moveitem" name="securityHouse" event="script" value="player/securityHouse.lua"/>  
    Registre o evento no arquivo onLogin.lua onde se encontra na mesma pasta:
    registerCreatureEvent(cid, "securityHouse")  

     
    É só isso mesmo, espero que a comunidade goste, pois estarei trazendo muito mais scripts.
     
    Observações:
    Caso haja algum erro na execução do script ou você esteja tendo problemas, só darei suporte aqueles que deixaram seu rep+
  11. Upvote
    FlamesAdmin recebeu reputação de Rik C em Alguem tem gift desas spell da pxg   
    Synchronoise = O poke faz uma cópia do proprio e o original fica invisivel. Codigo abaixo tem a mesma funçao
    elseif spell == "Substitute" then function sendEff(cid, master, t) if isCreature(cid) and isCreature(master) and t > 0 and #getCreatureSummons(master) >= 2 then doSendMagicEffect(getThingPos(cid), 86, master) addEvent(sendEff, 1000, cid, master, t - 1) end end if not isSummon(cid) then return true end doSummonMonster(getCreatureMaster(cid), getCreatureName(cid)) local substitute = getCreatureSummons(getCreatureMaster(cid))[2] doCreatureSetLookDir(substitute, getCreatureLookDir(cid)) adjustStatus(substitute, getPlayerSlotItem(getCreatureMaster(cid), 8).uid, true, true, true) setPlayerStorageValue(cid, 9658783, 1) doDisapear(cid) sendEff(cid, getCreatureMaster(cid), 6) addEvent(function() if not isCreature(cid) then return true end doAppear(cid) setPlayerStorageValue(cid, 9658783, -1) if isCreature(substitute) then doRemoveCreature(substitute) end end, 6000) Electro Web = Faz com que o target fique tomando pequeno dano em determinado tempo com stun/paralyze. ex: em 5 segundos ele ira receber 3x dano entre o tempo (1seg dano, 3seg dano e 5seg dano)
    elseif spell == "Electroweb" then local config = { times = 6, --Quantos ataques. interval = 1000, --Intervalo entre ataques. stunTime = 1, --Duraçăo do stun. distEffect = 37, --Distance effect. effect = 207, --Effect. stunEffect = 207 --Efeito do stun. } local function Electroweb(cid, times) if not isCreature(cid) or not isCreature(target) or times <= 0 then return true end local ret = {} ret.id = target ret.cd = config.stunTime ret.check = getPlayerStorageValue(target, conds["Stun"]) ret.eff = config.stunEffect ret.spell = spell ret.cond = "Stun" doSendDistanceShoot(getThingPos(cid), getThingPos(target), config.distEffect) doSendMagicEffect(getThingPos(target), config.effect) doMoveDano2(cid, target, ELECTRICDAMAGE, min, max, ret, spell) addEvent(Electroweb, config.interval, cid, times - 1) end Electroweb(cid, config.times) Rock Wrecker = 
    elseif spell == "Rock Wrecker" then local p = getThingPosWithDebug(cid) p.x = p.x+1 p.y = p.y+1 sendEffWithProtect(cid, p, 151) --send eff local function doDano(cid) local pos = getThingPosWithDebug(cid) local function doSendBubble(cid, pos) if not isCreature(cid) then return true end doSendDistanceShoot(getThingPosWithDebug(cid), pos, 39) doSendMagicEffect(pos, 239) end --alterado!! for a = 1, 20 do local r1 = math.random(-4, 4) local r2 = r1 == 0 and choose(-3, -2, -1, 2, 3) or math.random(-3, 3) -- local lugar = {x = pos.x + r1, y = pos.y + r2, z = pos.z} addEvent(doSendBubble, a * 25, cid, lugar) end addEvent(doDanoWithProtect, 150, cid, ROCKDAMAGE, pos, waterarea, -min, -max, 0) end addEvent(doDano, 1250, cid)  
  12. Upvote
    FlamesAdmin recebeu reputação de Strogman em Alguem tem gift desas spell da pxg   
    Synchronoise = O poke faz uma cópia do proprio e o original fica invisivel. Codigo abaixo tem a mesma funçao
    elseif spell == "Substitute" then function sendEff(cid, master, t) if isCreature(cid) and isCreature(master) and t > 0 and #getCreatureSummons(master) >= 2 then doSendMagicEffect(getThingPos(cid), 86, master) addEvent(sendEff, 1000, cid, master, t - 1) end end if not isSummon(cid) then return true end doSummonMonster(getCreatureMaster(cid), getCreatureName(cid)) local substitute = getCreatureSummons(getCreatureMaster(cid))[2] doCreatureSetLookDir(substitute, getCreatureLookDir(cid)) adjustStatus(substitute, getPlayerSlotItem(getCreatureMaster(cid), 8).uid, true, true, true) setPlayerStorageValue(cid, 9658783, 1) doDisapear(cid) sendEff(cid, getCreatureMaster(cid), 6) addEvent(function() if not isCreature(cid) then return true end doAppear(cid) setPlayerStorageValue(cid, 9658783, -1) if isCreature(substitute) then doRemoveCreature(substitute) end end, 6000) Electro Web = Faz com que o target fique tomando pequeno dano em determinado tempo com stun/paralyze. ex: em 5 segundos ele ira receber 3x dano entre o tempo (1seg dano, 3seg dano e 5seg dano)
    elseif spell == "Electroweb" then local config = { times = 6, --Quantos ataques. interval = 1000, --Intervalo entre ataques. stunTime = 1, --Duraçăo do stun. distEffect = 37, --Distance effect. effect = 207, --Effect. stunEffect = 207 --Efeito do stun. } local function Electroweb(cid, times) if not isCreature(cid) or not isCreature(target) or times <= 0 then return true end local ret = {} ret.id = target ret.cd = config.stunTime ret.check = getPlayerStorageValue(target, conds["Stun"]) ret.eff = config.stunEffect ret.spell = spell ret.cond = "Stun" doSendDistanceShoot(getThingPos(cid), getThingPos(target), config.distEffect) doSendMagicEffect(getThingPos(target), config.effect) doMoveDano2(cid, target, ELECTRICDAMAGE, min, max, ret, spell) addEvent(Electroweb, config.interval, cid, times - 1) end Electroweb(cid, config.times) Rock Wrecker = 
    elseif spell == "Rock Wrecker" then local p = getThingPosWithDebug(cid) p.x = p.x+1 p.y = p.y+1 sendEffWithProtect(cid, p, 151) --send eff local function doDano(cid) local pos = getThingPosWithDebug(cid) local function doSendBubble(cid, pos) if not isCreature(cid) then return true end doSendDistanceShoot(getThingPosWithDebug(cid), pos, 39) doSendMagicEffect(pos, 239) end --alterado!! for a = 1, 20 do local r1 = math.random(-4, 4) local r2 = r1 == 0 and choose(-3, -2, -1, 2, 3) or math.random(-3, 3) -- local lugar = {x = pos.x + r1, y = pos.y + r2, z = pos.z} addEvent(doSendBubble, a * 25, cid, lugar) end addEvent(doDanoWithProtect, 150, cid, ROCKDAMAGE, pos, waterarea, -min, -max, 0) end addEvent(doDano, 1250, cid)  
  13. Upvote
    FlamesAdmin recebeu reputação de Liker000 em Debug - OLD CLIENT HELP PLS   
  14. Upvote
    FlamesAdmin recebeu reputação de VictorWEBMaster em [OPEN-SOURCE] POKEMASTERX   
    usa o 1.7.3 ou 1.7.4 @Kevin Vittar
  15. Upvote
    FlamesAdmin recebeu reputação de mister17 em Preciso de um script de uma porta TIME e bau time   
    tem esse sistema na base do masterx
  16. Upvote
    FlamesAdmin deu reputação a Kuro o Shiniga em [NPC] Walk Hunt - Npc Caminha ate a hunt.   
    O NPC caminha junto com o player ate a hunt.
                                                                           Esse sistema é bem SIMPLES, um amigo me pediu, desenvolvi para ele e vim compartilhar com vocês
     
    Crie um arquivo lua em npcs e adicione :
     
    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 local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local possnpc = { --- poss que o npc vai andar {x=81 ,y=339, z=7}, {x=82 ,y=339, z=7}, {x=83 ,y=339, z=7}, {x=84 ,y=339, z=7}, {x=85 ,y=339, z=7}, {x=86 ,y=339, z=7}, {x=79, y=340, z=7} } local possplayer = { -- poss que o player vai andar {x=81 ,y=339, z=7}, {x=82 ,y=339, z=7}, {x=83 ,y=339, z=7}, {x=84 ,y=339, z=7}, {x=85 ,y=339, z=7}, {x=86 ,y=339, z=7} } local pid = getNpcId() -- não mexa local config = { -- não mexa str = 150729, tempo = 30, } function andarnpc() for i, pos in ipairs(possnpc) do addEvent(doTeleportThing, 1000+400*(i-1), pid, pos) end end function andarplayer(cid) for i, posdois in ipairs(possplayer) do if isCreature(cid) then addEvent(doTeleportThing, 1000+500*(i-1), cid, posdois) end end end for _, player in pairs(getPlayersOnline()) do if msgcontains(msg, "hunt") and getPlayerStorageValue(player, config.str) >= os.time() then selfSay("Não posso atender você agora!", cid) break end if msgcontains(msg, "hunt") and getPlayerStorageValue(player, config.str) < os.time() then setPlayerStorageValue(cid, config.str, os.time() + config.tempo) selfSay("Vou te levar ate a caverna misteriosa !", cid) andarnpc() andarplayer(cid) break end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())  
    Configuração :
     
    Aqui é aonde o npc vai andar, são as mesma poss que o player vai andar, porem você tem que por uma ultima poss para o npc, nessa ultima poss você coloca a posição aonde o npc estava antes do jogador falar com ele !
    local possnpc = { --- poss que o npc vai andar {x=81 ,y=339, z=7}, {x=82 ,y=339, z=7}, {x=83 ,y=339, z=7}, {x=84 ,y=339, z=7}, {x=85 ,y=339, z=7}, {x=86 ,y=339, z=7}, {x=79, y=340, z=7} } Essa é a poss do inicio, aonde o npc vai aparecer quando ele levar o jogador, não esqueca de colocar a posição correta, se não o npc vai ficar dentro da hunt com o player, e outros players não vão conseguir encontrar o npc.
    {x=79, y=340, z=7} -- poss aonde o npc tava antes de levar o player para a hunt OBS: Existe um tempo para poder falar com o NPC, caso o npc esteja levando algum player para a hunt, outro jogador não pode conversar com ele, ate que ele complete a caminhada, caso queira mudar o tempo edite aqui :
     
    tempo = 30, -- 30 = 30 segundos  
  17. Upvote
    FlamesAdmin deu reputação a Kuro o Shiniga em [SIMPLE] Battle Dungeon - Player X Monster   
    Sistema SIMPLES de Dungeon, o player entra no teleport e é criado alguns monstros para o jogador matar dentro de um  tempo de 30 segundos, se ele matar todos os monstro no tempo  ele recebe a recompensa em Exp e Gold, se ele não matar todos ele volta para o templo e da a chance de outro jogador entrar na Dungeon.
     
    Testado: Snowz Thyranic 3.1 [Especial Edition] (8.6)
     
    Em movements crie um arquivo do teleport da dungeon e adicione:
    function onStepIn(cid, item, position, fromPosition) local config = { posdung = {x=317, y=120, z=7}, -- poss da arena str = 15281, -- não mexer storage = 98551, -- não mexer tempo = 30, tempoarena = 30000, -- tempo que ele tem para terminar a arena 30000 = 30s monsterum = "Dragon" -- primeiro monstro que vai ser criado quando o player entrar na arena } local posstemplo = {x=63, y=42, z=7} function Tp() if isCreature(cid) then doTeleportThing(cid, posstemplo) end return true end function Str() if isCreature(cid) then setPlayerStorageValue(cid,config.storage, 0) end return true end function deletamonstro() local spec = getSpectators(config.posdung, 10, 10) if spec ~= nil then for _, s in pairs(spec) do if isMonster(s) then doRemoveCreature(s) end end end end for _, player in pairs(getPlayersOnline()) do if getPlayerStorageValue(player, config.str) >= os.time() then doTeleportThing(player, fromPosition) doPlayerSendTextMessage(cid, 22, "Já existe player em batalha!") elseif getPlayerStorageValue(player, config.str) < os.time() then setPlayerStorageValue(cid, config.str, os.time() + config.tempo) doTeleportThing(cid, config.posdung) doSendMagicEffect(getThingPos(cid), 10) doCreateMonster(config.monsterum, getThingPos(cid)) addEvent(Tp, config.tempoarena) addEvent(Str, config.tempoarena) addEvent(deletamonstro, config.tempoarena) break end end end <movevent type="StepIn" actionid="2569" event="script" value="arquivo.lua"/> CreatureScripts crie um arquivo lua e adicione :
    local monster = { --- tabela de monstro, se quiser adicionar mais e so adicionar na tabela [1] = "Dragon", [2] = "Dragon Lord", [3] = "Hydra", [4] = "Demon", } local config = { posstemplo = {x=63, y=42, z=7}, -- poss aonde o player vai ser enviado quando terminar ou se falhar storage = 98551, -- não mexa premioexp = 800000, -- tanto de exp que o player vai ganhar quant = 1000000, --- quantidade de dinheiro que vai ganhar } function onDeath(cid, corpse, deathList, target) local storage_value = getPlayerStorageValue(deathList[1], config.storage) < 1 and 1 or getPlayerStorageValue(deathList[1], config.storage) local new_value = storage_value + 1 if getCreatureName(cid) == monster[storage_value] then setPlayerStorageValue(deathList[1], config.storage, new_value) doSendMagicEffect(getPlayerPosition(deathList[1]), 12) doCreatureSay(cid, 'Fight', TALKTYPE_MONSTER) if new_value > #monster then doPlayerSendTextMessage(deathList[1], 22, "Completa!") doPlayerAddMoney(deathList[1], config.quant) doPlayerAddExp(deathList[1], config.premioexp) doTeleportThing(deathList[1], config.posstemplo) doSendMagicEffect(getThingPos(cid), 10) else doCreateMonster(monster[new_value], getThingPos(cid)) end end end <event type="death" name="dungeon" event="script" value="arquivo.lua"/> Adicione dentro do arquivo de cada monstro que vai ter na dungeon :
    <script> <event name="dungeon"/> </script>
    Configurando :
    Em movements você adiciona a poss da dungeon
    posdung = {x=317, y=120, z=7}, -- poss da arena Aqui você adiciona o primeiro monstro da dungeon 
    monsterum = "Dragon" -- primeiro monstro que vai ser criado quando o player entrar na arena Em creaturescript você adiciona a poss do templo aonde o player vai aparecer quando finalizar a dungeon
    posstemplo = {x=63, y=42, z=7}, -- poss aonde o player vai ser enviado quando terminar E aqui os monstros que vai ter na dungeon
    local monster = { --- tabela de monstro, se quiser adicionar mais e so adicionar na tabela [1] = "Dragon", [2] = "Dragon Lord", [3] = "Hydra", [4] = "Demon", } Dentro da sala da dungeon coloque ANT-LOGOUT pelo mapa editor, para evitar de jogadores fazer logout dentro da dungeon.
  18. Upvote
    FlamesAdmin deu reputação a Tony Araujo em [ACTION] Auto Loot - Coletando ao abrir corpo   
    Eai galera do Eks, tudo bão? Quanto tempo que eu não venho por esses lados, saudades xD
    Bom, sem muita enrolação, eu vim postar pra vocês o sistema de auto loot que eu fiz aqui rapidinho (literalmente, 10 mins), porém que ficou bem bacana. É aquele esquema, você coleta o loot quando abre o corpo do bicho morto. Está bem simples, porém funcional. Eu pesquisei a respeito, pra ter uma ideia e não encontrei nenhum que tivesse com um código legal, todos estavam bem antigos.
     
    Eu não tive muito tempo testando, então caso encontrem qualquer bug, me avise pfv.
     
    function onUse(cid, item, fromPosition, itemEx, toPosition) if getItemAttribute(item.uid, "corpseowner") ~= cid then return doPlayerSendCancel(cid, "You're not the owner.") end local items = {} for i = 0, getContainerSize(item.uid) do local it = getContainerItem(item.uid, i) if it.uid > 0 then table.insert(items, {it.itemid, it.type}) doRemoveItem(it.uid) end end if #items > 0 then for k = 1, #items do local playerItem = getPlayerItemById(cid, true, items[k][1]) if playerItem.uid > 0 then if (playerItem.type + items[k][2]) > 100 then doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100) doTransformItem(playerItem.uid, items[k][1], 100) else doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2]) end else doPlayerAddItem(cid, items[k][1], items[k][2]) end end return true end return false end  
  19. Upvote
    FlamesAdmin deu reputação a JG6 em OTCLIENT 0.6.5++   
    Todas as versões estão no fórum só dar uma olhada na área clientes.
  20. Upvote
    FlamesAdmin recebeu reputação de Vini Original em CP Cinnabar & Cidade Hamlin PxG   
    Eae galera, to passando aki rapidin pra postar esse mapa que achei no pc que eu fiz do PxG.
     
    Prints:

     
     
    Download:
    http://www.4shared.com/rar/l3jDJmEo/Cp_CinnabarCidade_Hamlin.html
    OBS: Em Hamlin é só a Cidade, nao tem as hunts. Bom uso do mapa. Boa noite xD.
  21. Upvote
    FlamesAdmin recebeu reputação de Shiroe em [Pokémon Mapa] Frontier Access e Violet City   
    Versao 1
     
    Versão 2
     
    Eae galerinha, vim trazer para vcs a Versão 2 do meu map ai que postei recentemente...
     
    Mapa baseado no "Frontier Access e em Violet City"
     
    Download Aqui.
     
    Scan:

    http://tinypic.com/r/302s700/6
     
    Prints: Obs: eu postei essas imagens no meu face, nao tem com que se preucuparem.
    Eu esqueci de apertar 'S' para tirar os Respaw...
     
     
     
     
    Comentem ai...
     
    Aé, ja ia me esquecendo, os Creditos de alguns npcs:
     
    Em breve postarei outras atualizaçoes...
     
    Proxima Versao:
  22. Upvote
    FlamesAdmin recebeu reputação de Shiroe em CP Cinnabar & Cidade Hamlin PxG   
    Eae galera, to passando aki rapidin pra postar esse mapa que achei no pc que eu fiz do PxG.
     
    Prints:

     
     
    Download:
    http://www.4shared.com/rar/l3jDJmEo/Cp_CinnabarCidade_Hamlin.html
    OBS: Em Hamlin é só a Cidade, nao tem as hunts. Bom uso do mapa. Boa noite xD.
  23. Upvote
    FlamesAdmin recebeu reputação de Belzebu6 em Sprite e Dat GTA Quilante, TWD & Harry Potter Quilante   
    Eae galera do XTibia, trago aqui pra vcs fãs de GTA Tibia, The Walking Dead e Harry Potter Tibia, a .Spr e .Dat do GTA Tibia Quilante, The Walking Dead Tibia Quilante e Harry Potter Tibia Quilante recentes.
    Lembrando que é versao 8.6. Eu msm rippei as sprites do client com Tibia Unbinder.
     

     

     
     

     
     

     

     
     
     
     
     
    Créditos:
     
    Equipe Quilante pelas Sprites
    A mim, por rippar ( sla como fala ) as sprites do client.
     
     
    Tenha bom uso xD.
  24. Upvote
    FlamesAdmin deu reputação a Benny em [OTClient] Cor no nome por tag (ADM;GM;HELP)   
    PREVIEW:
     
     
    CÓDIGO:
     
    Abra o creature.cpp da source do seu otclient e procure por: 
    void Creature::setHealthPercent(uint8 healthPercent) Substitua tudo por:
    void Creature::setHealthPercent(uint8 healthPercent) { if(m_name.find("[ADM]")!=std::string::npos) m_informationColor = Color(0x00, 0x2a, 0xff); else if(m_name.find("[GM]")!=std::string::npos) m_informationColor = Color(0x00, 0xff, 0x0c); else if(m_name.find("[HELP]")!=std::string::npos) m_informationColor = Color(0xff, 0x00, 0x00); else if(healthPercent > 92) m_informationColor = Color(0x00, 0xBC, 0x00); else if(healthPercent > 60) m_informationColor = Color(0x50, 0xA1, 0x50); else if(healthPercent > 30) m_informationColor = Color(0xA1, 0xA1, 0x00); else if(healthPercent > 8) m_informationColor = Color(0xBF, 0x0A, 0x0A); else if(healthPercent > 3) m_informationColor = Color(0x91, 0x0F, 0x0F); else m_informationColor = Color(0x85, 0x0C, 0x0C); m_healthPercent = healthPercent; callLuaField("onHealthPercentChange", healthPercent); if(healthPercent <= 0) onDeath(); } Explicação:
     
    [ADM] é a tag (Qualquer personagem que tenha [ADM] no nome)
    Color(0x00, 0x2a, 0xff) é a cor. No caso, você tem que usar cores RGB Hexadecimais, pode encontrar uma tabela AQUI e completar com 0x.
    Exemplo:
    A cor amarela tem como código: #FFFF00
    Ficaria assim: Color(0xFF, 0xFF, 0x00)
     
    Qualquer dúvida, à disposição!
    Créditos: @Refe
     
    Abração!!
     
  25. Upvote
    FlamesAdmin deu reputação a LeoTK em [Proteção Cab] Proteção cab para todas as versões   
    Olá a todos. Bom eu percebi que tem algumas pessoas levando vantagem em cima de um programa gratuito disponível na internet, então resolvi postar ele para todos usarem gratuitamente é um programa que além de criar a pasta cab muda a file name/mask do aplicativo, assim fazendo com que ele necessite abrir o data.cab criado por você trazendo enfim a proteção.cab para os clientes de hoje, o problema que existe nele é que ele coloca diversos falsos positivos no cliente fazendo com que qualquer anti-virus detecte o cliente do servidor como uma ameaça assim excluindo do computador e consequentemente faz com que o servidor perca jogadores, mas já que tem pessoas levando vantagem sobre esse programa gratuito na internet e cobrando horrores para passar esse programa e um tutorial de como fazer isso eu vou disponibilizar aqui para uso gratuito de todos.
     
    O Nome do programa em questão é
    Enigma Virtual Box
    Link para acessar o site oficial para baixar o programa
    https://enigmaprotector.com/en/downloads.html
     
    Bom agora irei mostrar como fazer o procedimento com um vídeo
    obs: estarei usando uma versão inferior mas o procedimento é o mesmo
     
     
     
    Após esse processo o cliente fica dessa forma
    Scan do cliente
    https://www.virustotal.com/#/file/c560af8310c672d88f20649178036220cc20b00e074959e9a14975727a8ec936/detection
     
    Scan da data.cab
    https://www.virustotal.com/#/file/2a43b080250ff3e02a1d3d5409f765e70cd4385bca748bae1f0b4b35bbd9e00b/detection
     
    Bom é isso pessoal o intuito é acabar com essa cilada
    Aproveito para falar sim que existe programadores que realmente criam programas próprios e realmente cria uma boa proteção mas não é o que esta acontecendo aqui ultimamente então o intuito e acabar com essas pessoas que estão se aproveitando desse programa para querer enganar falando que a proteção foi criada por eles etc... sendo que é um programa gratuito e disponível na internet
     
     
     
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...