Ir para conteúdo
  • Cadastre-se

davidvietro

Membro
  • Total de itens

    27
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    davidvietro 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!
  2. Curtir
    davidvietro deu reputação a Natanael Beckman em DEV C++ Compilando TFS no Windows   
    DEV C++,  aprenda a compila uma source TFS!
     
    Downloads(Baixe de acordo as configurações do seu windows):
    DEV C++ CONFIGURADO PARA 32BITS
    DEV C++ CONFIGURADO PARA 64BITS
    REV 3884 TFS 0.4
     
    Certo, feitos os downloads, extrai DEV C++ no Disco C e REV 3884 em Documentos.
    ======================================
    Abra o DEV C++:
    ======================================

    ======================================
    Abra a Source:
    ======================================

    ======================================
    Localize a pasta da Source e abra o arquivo TheForgottenServer.dev, Documentos> trunk.r3884> dev-cpp> TheForgottenServer.dev:
    ======================================

    =============================================================

    ======================================
    Aguarde carregar todos os arquivos:
    ======================================

    ======================================
    Vamos adicionar o parâmetro -D__CONSOLE__ no teclado digita ALT + P, clique em parameters e adicione o parâmetro... Feito? clique em OK:
    ======================================

    ======================================
    Vamos compilar Source, no teclado digite CTRL+F9 e aguarde finalizar o processo:
    ======================================

    ======================================
    Se der tudo certo em Log vai estar como mostra a imagem abaixo:
    ======================================

    ======================================
    Verifique na pasta Documentos> trunk.r3884> dev-cpp você vai encontrar o arquivo TheForgottenServer.exe e pronto meu parabéns você compilou!
    ======================================

    ===========================================
    Só isso galera tutorial rápido resumido e útil!
    Créditos Natanael Beckman!    
    ===========================================     
     
    Caso você adquira uma source com apenas os arquivos .cpp e .h e não sabe como compilar o projeto, abaixo vamos explicar:
    Na pasta onde está localizado os arquivos .cpp e .h crie uma pasta chamada dev-cpp, e dentro dela adicione uma imagem icone.
     

     
    Abra o DEV-C++, clique em  File> New> Project:
     

     
    Logo em seguida selecione Empty Project, em name terá o nome Project1 altere utilize o nome quer quiser, após isso clique em OK e em seguida selecione a pasta dev-cpp que criamos:
     

     
    Agora selecione a opção Win32GUI caso use source OTX ou TFS selecione Win32Console ao lado << Browse selecione a imagem do icone que está na pasta Dev-Cpp.
     

     
    No mesmo menu na aba Parameters em C++ compiler adicione os seguintes parâmetros:
    -D__ENABLE_SERVER_DIAGNOSTIC__ -D__ROOT_PERMISSION__ -D__GROUND_CACHE__ -D__USE_SQLITE__ -D__USE_MYSQL__ -D__CONSOLE__ -D__WAR_SYSTEM__ E em Linker adicione as seguintes libs:
    -lboost_filesystem -lboost_thread -lboost_system -lboost_regex -lsqlite3 -lwsock32 -llua5.1 -lws2_32 -leay32 -lmysql -lxml2 -lgmp -lz -s   No mesmo Menu na aba Build Option escreva na segunda coluna horizontal escreva Obj e dê OK.     Na lateral terá o nome do seu projeto o meu no caso é The Forgotten Server, clique com o botão direito do mouse em cima do nome e clique na opção Add Project:      Selecione na pasta da sua source todos os arquivos .cpp e .h após isso salva o projeto e já pode compilar CTRL+F9:         OpenSSL 0.9.8   1º baixe http://devpaks.org/details.php?devpak=73 2° abra Dev-Cpp > Tools > Packager Manager > Install > Seleciona o arquivo baixado e instala, fecha abre e testa!
      Clica aqui \/
  3. Gostei
    davidvietro deu reputação a xWhiteWolf em Dodge System 8.54+   
    Ae galera do TK, uns caras ficaram me mandando PM pedindo esse sistema aqui.. aparentemente tem em algum server e eles queriam replicar o sistema no OT deles. Não sei como funciona no outro server mas no script que eu fiz vai funcionar assim:
    Serão 100 livros que você poderá comprar de um npc específico, cada livro te dá 1 ponto a mais na skill Dodge e isso acarreta em 0.3% de chance a mais de desviar de um golpe e tomar só 50% de dano. Infelizmente eu nunca joguei no servidor que foi o pioneiro desse sistema (na vdd eu nem sei qual é) então eu não fiz igual o deles, na realidade o meu só funciona ao perder vida então se o mago usar utamo vita acabou os dodge's dele. Outra coisa importante é que o player tem uma chance rara de dar Dodge no Dodge, ou seja, levando 1/4 do dano. Só vai funcionar para ataques de criaturas, tanto melee quanto spells, ou seja, se o cara passar no fogo não tem chance dele desviar do dano 
    Sem mais delongas, vamos ao script:

    Crie um arquivo chamado dodge.lua na pasta creaturescripts\scripts e coloque isso dentro dele:
     

    agora adicione essa linha no creaturescripts.xml:
    <event type="statschange" name="dodge" event="script" value="dodge.lua"/> em creaturescripts\scripts\login.lua adicione isso antes do ultimo return true:
    registerCreatureEvent(cid, "dodge") if getPlayerStorageValue(cid, 48902) == -1 then         setPlayerStorageValue(cid, 48902, 0)      end agora vá em actions.xml e adicione essa linha aqui:
    <action itemid="1950" script="dodgebook.lua"/> note que vc pode mudar o ID do livro a hora que vc quiser.

    em items.xml, procure o item com o ID que vc irá utilizar e deixe ele assim:
    <item id="1950" article="a" name="Skill Book [DODGE]"> <attribute key="weight" value="1300" /> </item> agora crie um arquivo chamado dodgebook em actions\scripts e coloque isso dentro dele:
  4. Gostei
    davidvietro deu reputação a xWhiteWolf em Dodge System 8.54+   
    aonde está 
    if type == STATSCHANGE_HEALTHLOSS and isCreature(attacker) then deixa
    if type == STATSCHANGE_HEALTHLOSS or (type == STATSCHANGE_MANALOSS and getCreatureCondition(cid, CONDITION_MANASHIELD)) and isCreature(attacker) then  
  5. Gostei
    davidvietro deu reputação a MickeyBlooD em [TFS 0.3.6 - 0.4] Tirando "BLACKLIST"   
    Eae Pessoal do Tibiaking ! Vi que tinha muita gente , Com dedicado e "talz" , querendo tirar o blacklist na hora de inicializar a distro e deixar o server no autorestart (24horas) , no meu caso . uso Linux
     
    Em otserv.cpp , procure por :
    { #if defined(WINDOWS) && !defined(__CONSOLE__) if(MessageBox(GUI::getInstance()->m_mainWindow, "Unable to fetch blacklist! Continue?", "Blacklist", MB_YESNO) == IDNO) #else std::cout << "Unable to fetch blacklist! Continue? (y/N)" << std::endl; char buffer = getchar(); if(buffer == 10 || (buffer != 121 && buffer != 89)) #endif startupErrorMessage("Unable to fetch blacklist!"); } substitua por :
    /*{ #if defined(WINDOWS) && !defined(__CONSOLE__) if(MessageBox(GUI::getInstance()->m_mainWindow, "Unable to fetch blacklist! Continue?", "Blacklist", MB_YESNO) == IDNO) #else std::cout << "Unable to fetch blacklist! Continue? (y/N)" << std::endl; char buffer = getchar(); if(buffer == 10 || (buffer != 121 && buffer != 89)) #endif startupErrorMessage("Unable to fetch blacklist!"); }*/ só isso , REP + por favor
     
    Créditos : 
    Eu (MickeyBlooD/Snoow) -> Só adicionei as tags de comentário
     
     
     
     
     
  6. Gostei
    davidvietro deu reputação a llucas75 em (Resolvido)[BUG SCRIPT] Double xp potion socorro   
    Poko 360 desculpe-me pela demora o script do jeito que vc queria exigia um conhecimento que eu não tinha ainda...
     
    expo.lua
     



     
    tag em actions
     



     
     
    Obs: aconselho colocar um script assim(se o player deslogar ele perde o storage da pot assim podendo usar a pot denovo e conseguir o efeito denovo)(script totalmente configuravel olhe os comentarios deixados).
     
    perderefeito.lua
     



     
    login.lua
     



     
    creaturescript.xml
     



     
     
     
    Agradeço aos veteranos:
     
    Eduardo
    Max
    Killua 
     
    Pela força.
  7. Gostei
    davidvietro deu reputação a Thiago Rulexz em [MOD] Evento PaintBall   
    Evento Paint Ball 1.1 <3
     
    I ae galerinha Venho hoje trazer um Evento novo no TK (lembrando que esse evento já estava disponível em outro fórum estou somente trazendo e darei suporte com qualquer problema)
    Estava devendo conteúdo ao fórum então decidi voltar <3
     
    Vamos lá!!! 1 um videozinho de como Fununça o Evento
     

     
     
    https://www.youtube.com/watch?v=9MwjN43Pyos
     

     
     
    Download Mapa
    LEMBRANDO Q VC PODE USAR O MAPA QUE QUISER
     
    Primeiramente não se esqueça de colocar No-Pvp e No-Logout em toda a área do Evento
     
    O Mod está aqui (PASTEBIN)
     
    Perguntas:
     
    P: Já testou o Mod?
    R: Sim já testei o Mod em tfs 0.3.6 (evento testado com 6 Pessoas Não sei como ele se comporta além disso, qualquer problema informar)
     
    P:Como configura o script?
    R:Vamos lá
    paintball_spawn_area = { top_left = {x = 970, y = 1040, z = 4}, bottom_right = {x = 975, y = 1046, z = 7} } essa parte do script se refere a área de respaw do player no evento... Da ponta superior esquerda a ponta inferior direita
    tp_to_paintball = {x = 985, y = 1,052, z = 7}, event_ending_pos = {x = 985, y = 1,052, z = 7} Nessa parte é diferente
    a 1 Linha é onde o tp de acesso ao Evento aparecerá
    e a 2 linha é onde os player vão ser teleportados quando o evento acabar (geralmente se coloca o templo, vocês quem sabem)
    messages = { event_started = "Paintball event has started! there's a teleport near Thais temple!", event_ended = "Paintball event has ended!" } Essa é a mensagem que o Servidor irá transmitir em Global quando o evento começa e quando ele se encerra
    event_config = { event_duration = 0, --minutes, 0 if it's an always-open event infinite_ammo = false, winner_gets_item = true, prize_item_id = 3051, decrease_score_on_death = true, points_per_kill = 1, ammo_per_point = 100, reset_bullets_on_death = true, min_bullets_on_spawn = 100 } Bom está parte qualquer 1 q conhece um pouco o famoso PORTUGLES consegue
     
    event _duration = o tempo do evento... se ficar 0 o evento fica open forever
    Infinite_ammo = munição infinita
    Winners_gets_item = se o Player vencedor ganha Item
    prize_item_id = Qual item o vencedor vai ganhar
    points_per_kill = quantos pontos o player ganha por kill
    ammo_per_point = quanto de munição ele ganha por ponto
    reset_bullets_on_death = resetar as balas quando morre
    min_bullets_on_spawn = minimos de balas quando nasce
    misc = { walls_id = {1115,1111,1112,5258,1385,1113}, bullets_exhaust = 500, --in ms bullet_speed = 150 }, Wall_ids = essa matriz irá conter todos os itens que podem bloquear as balas.
    bullets_exhaust = tempo entre cada tiro em milissegundos
    bullet_speed = a velocidade da bala viaja em milissegundos
     

     
     
     
    O Script não é de minha autoria... estou somente trazendo ao TK e dando suporte a ele...
    Qualquer Duvida pode falar
     
     
    @LOG
    Oque Foi Feito na 1.1?
    Diminui o Código, Adaptei perfeitamente para 8.6 e Troquei todos os nomes que havia de paintball no código para Kienzan (só destrocar)
     
     
    CRÉDITOS:
    Bogart (por fazer o Código)
    Eu (por traduzir e trazer ao TK e dar suporte)
  8. Gostei
    davidvietro deu reputação a xFatality em [Tutorial] Potions Infinita   
    Olá Tibia King
    Hoje,vou trazer a voces um tutorial de potions infinita,testei em todas as versões e nenhuma deu problema.
    Eu sei que já tem varios topicos de potions infinita,mas como eu tava olhando,tem alguns com bugs e etc,e então vou ensinar um sem bug.
     
    Primeiramente siga este caminho na pasta do seu servidor :
    Data/Actions/Scripts/Liquids/Potions.lua
     



     
    O Script que tem que ser inserido nessa parte é :
     



     
    Após a inserção deste comando no servidor, se você não deseja reiniciar o servidor digite:
    /reload action
     
    Obrigado,
    Abraços.
  9. Gostei
    davidvietro deu reputação a Tricoder em Blind Anger   
    Preview

     
    Script
    data/spells/spells.xml
    <instant name="Sorcerer Fury" words="blind anger" lvl="200" mana="1500" prem="1" selftarget="1" exhaustion="2100" needlearn="0" script="attack/anger.lua"> <vocation id="1"/> <vocation id="5"/> </instant> data/spells/scripts/attack/anger.lua
    local repeatAmount = 3 local deathFlamesArea = { createCombatArea({ {0, 1, 0}, {1, 2, 1}, {0, 1, 0} }), createCombatArea({ {0, 1, 1, 1, 0}, {1, 1, 0, 1, 1}, {1, 0, 2, 0, 1}, {1, 1, 0, 1, 1}, {0, 1, 1, 1, 0} }), createCombatArea({ {0, 0, 1, 1, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 2, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 1}, {0, 1, 0, 0, 0, 1, 0}, {0, 0, 1, 1, 1, 0, 0} }) } local bigFlamesArea = createCombatArea({ {0, 0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 0, 0, 0, 1, 1, 0}, {1, 1, 0, 0, 0, 0, 0, 1, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 2, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 1, 0, 0, 0, 0, 0, 1, 1}, {0, 1, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 0, 0} }) local deathFlames = {} for k, area in ipairs(deathFlamesArea) do deathFlames[k] = createCombatObject() setCombatParam(deathFlames[k], COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(deathFlames[k], COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatFormula(deathFlames[k], COMBAT_FORMULA_LEVELMAGIC, -0.593, -50, -0.929, -100) setCombatArea(deathFlames[k], area) end local bigFlames = createCombatObject() setCombatParam(bigFlames, COMBAT_PARAM_TYPE, COMBAT_ENERGYLDAMAGE) setCombatParam(bigFlames, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS) setCombatFormula(bigFlames, COMBAT_FORMULA_LEVELMAGIC, -0.766, -50, -1.241, -100) setCombatArea(bigFlames, bigFlamesArea) function onTargetTile(cid, pos) doSendDistanceShoot(getCreaturePosition(cid), pos, CONST_ANI_DEATH) end setCombatCallback(bigFlames, CALLBACK_PARAM_TARGETTILE, "onTargetTile") local function castSpellDelay(p) if(isCreature(p[1]) == TRUE) then doCombat(unpack(p)) end end function onCastSpell(cid, var) for i = 0, repeatAmount - 1 do for k, combat in ipairs(deathFlames) do addEvent(castSpellDelay, (150 * k) + #deathFlames * 150 * i + 700 * i, {cid, combat, var}) end addEvent(castSpellDelay, (150 * #deathFlames) + #deathFlames * 150 * i + 700 * i, {cid, bigFlames, var}) end return LUA_NO_ERROR end Créditos: Rugged Mage
  10. Gostei
    davidvietro deu reputação a xWhiteWolf em Novo Sistema de Trainer [0.36~0.4]   
    Olá meus caros do Tibia King, hoje vim trazer pra vocês um sistema que bolei pra um concurso em outro fórum mas acabei ficando descontente e nunca cheguei a disponibilizar.
    Eu gostaria de agradecer inicialmente à três acontecimentos que sem eles não seriam possíveis a criação desse sistema.
    - A otlist obrigar que os servidores utilizem anti idle 
    - Os mages do meu servidor reclamarem que não dava pra treinar ml nos trainers
    - Ao @Storm Night, que embora tenha me irritado muito nesse tópico aqui , botou a sementinha dessa idéia na minha cabeça. 
     

     
    Explicação É a combinação de dois sistemas que eu ja havia feito, o primeiro escolhe entre todas as salas de treiner aquela que está vazia pra te alocar e o segundo te mantém alimentado e rodando pra simular o anti idle. (Nota: ele não impede o anti idle de fato, se vc quiser fazer isso vc vai precisar editar o script de anti idle que vc utiliza pra ignorar players com determinado storage e adicionar o storage no player quando ele entrar na sala e tirar ao sair.. mas não sei até que ponto isso pode provocar ban da OTservlist por isso decidi não ensinar isso aqui.)

    Sem mais delongas, talk is cheap, show me the code. 
     
    Idéia Basicamente dá pra reduzir toda a idéia do código nessa foto aqui:
     

    Você tem diversas salas com trainers nesse formato (pode ser em linha reta horizontal ou vertical tb, mas assim fica melhor distribuído). Você inclusive pode criar salas no meio do void  de forma que a distancia de uma vc nao consiga ver a outra e vai ser uma experiencia muito amigável para o player ver que está treinando sozinho na paz. Ao entrar no tp ele te aloca na primeira sala vazia, se não houverem salas vazias ele retorna que não tem posições livres

     
    Instalação Você precisa criar as salinhas dos trainers equidistantemente, ou seja, tendo a mesma distância A em X e mesma distância B em Y. Sério, se vc errar nessa parte é porque vc não sabe oque significa equidistante. Vai pesquisar preguiçoso!! Já aviso que não vou dar suporte quanto à isso.

    Você vai precisar criar salas parecidas com isso daqui:
     

    Perceba que não tem como ter acesso a essa sala, não tem como ser puxado pra fora do trainer, não tem dor de cabeça nenhuma e quando o player quiser sair ele só entra no tp e volta pro templo ou pra onde vc definir.

    Nesse teleport da sala vc adiciona o actionid 14877 e não bota nenhuma posição nele.
    Naquele tile que o player irá ficar que inclusive tem id diferente vc bota actionid 14878.
    Agora seleciona a area dessa sala no rme e vai copiando e colando percebendo sempre se vc tá criando as salas com mesma distância em X. Se o ponto inicial de uma sala é 140 e vc quer que todas tenham 12 sqm de distancia vc cria em 152, 164, 178.. por aí vai. 

    Quando terminar as salas que quiser e tiver montado as linhas e colunas da forma que desejou, vc vai criar um tp principal pra alocar os players nessa sala:


    Lembrando que ele não deve ter posição no rme, vc só bota o actionID 14876 e deixa a toPos dele 0, 0, 0. Ele não tem q te teleportar pra nenhum lugar pois a posição será decidida por script.

    Se você fez tudo certo até agora vc deve ter algo +- assim:
     


    O importante é manter a distancia certinha entre cada sala. Aí no caso eu fiz rX = 11 e rY = 8 (é a terceira ou quarta vez q eu to falando isso, se vcs errarem pqp eu vou ficar muito irritado);

    Vc não bota os trainers, e ali embaixo do spawn vc tem que botar um outro obstáculo pra impedir que o player ande pra baixo e dê a sala como livre.


    Feito isso só adicionar os scripts abaixo:
    movements.xml
        <movevent type="StepIn" actionid="14876" event="script" value="trainertp.lua"/>     <movevent type="StepIn" actionid="14877" event="script" value="trainertp2.lua"/>     <movevent type="StepIn" actionid="14878" event="script" value="foodtrainer.lua"/>
    movements/scripts/trainertp.lua:

    movements/scripts/trainertp2.lua:
     


    movements/scripts/foodtrainer.lua:
     

    FIM, qualquer dúvida ou comentário ou sugestão coloquem abaixo. Se gostou REP+, se não gostou REP+ pq deu trabalho e vai ser útil pra alguém, mesmo que de estudo. 
    Abraços do Lobo. 

    E ao cara do outro fórum que ficou falando que ia dar erro e quis ficar me corrigindo e mandando scripts sem noção pra "mostrar" que sabia de lua: 
  11. Gostei
    davidvietro deu reputação a xWhiteWolf em Novo Sistema de Trainer [0.36~0.4]   
    local position = {x = 156, y = 45, z = 6} -- posicao da primeira pos (linha 1 coluna 1) local config = { distX= 12, -- distancia em X entre cada sala (de uma mesma linha) distY= 9, -- distancia em Y entre cada sala (de uma mesma coluna) rX= 2, -- numero de colunas rY= 2 -- numero de linhas } local storage = 18481 -- storage que salva a ultima vez que o player entrou (pra evitar spams) local function isWalkable(pos, creature, proj, pz)-- by Nord -- só adicione se vc já não tiver ela if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end local function check_disponivel(npos) if isWalkable(npos, true, true) then return true end return false end local function countdown(pos, Arraypos) if not check_disponivel(pos) then for lugares = 1, #Arraypos do creature = getTopCreature(Arraypos[lugares]).uid if not isCreature(creature)then doCreateMonster("Trainer", Arraypos[lugares]) doSendAnimatedText(Arraypos[lugares], "GO!!", TEXTCOLOR_ORANGE) doSendMagicEffect(Arraypos[lugares], 10) end end end end local function fazQualquerCoisa(cid, pos, i, j) -- isso é o coração do nosso script, nao mexa nisso j = j or 0 p = i or 0 if p >= config.rX then p = 0 j = j < config.rY -1 and j + 1 or false end if j then posi = {x = pos.x + ( p * config.distX), y = pos.y + (j * config.distY), z = pos.z} if check_disponivel(posi) then doTeleportThing(cid, posi) doSendMagicEffect(posi, 10) countdown(posi, {{x = posi.x - 1, y = posi.y + 1, z = posi.z}, {x = posi.x + 1 , y = posi.y + 1, z = posi.z}}) else fazQualquerCoisa(cid, pos, p + 1, j) end else doPlayerSendCancel(cid, "Couldn't find any position for you right now.") end end function onStepIn(cid, item, pos, lastPos, fromPos, toPos, actor) if getPlayerStorageValue(cid, storage) - os.time() <= 0 then fazQualquerCoisa(cid, position) else doTeleportThing(cid, fromPos) doPlayerSendCancel(cid, "You gotta wait a few seconds before you can enter trainning room again") end return true end usa assim, dsclpa qlqer inconveniência
  12. Gostei
    davidvietro deu reputação a Vodkart em House Clean   
    Descrição: É para deletar house de players inativos, ou seja, o player que não loga em "X" dias perde a sua house!

    houseclean.lua

    function onTimer() local days = 15*24*60*60 doSaveServer() local query = db.getResult("SELECT `owner`,`id` FROM `houses`;") if (query:getID() ~= -1) then while true do local own,houseid = query:getDataInt("owner"),query:getDataInt("id") local qry = db.getResult("SELECT `lastlogin` FROM `players` WHERE `id` = "..own) if(qry:getID() ~= -1) then last = tonumber(qry:getDataInt("lastlogin")) if last < os.time() - days then setHouseOwner(houseid, NO_OWNER_PHRASE,true) end end if not(query:next()) then break end end query:free() end return true end globalevents.xml <globalevent name="HouseClean" time="03:00" event="script" value="houseclean.lua"/> na tag está para executar o script as 3 da manhã se quiser alterar só mudar essa parte: time="03:00" para configurar os dias que o player que não logar em "X" dias É aqui: local days = 15*24*60*60

    no caso está para o jogador que não logar em 15 dias perder a house.
  13. Gostei
    davidvietro deu reputação a Lyu em Death System 2016 versão frag consecutivo!   
    Fala rapaziada, quanto tempo sem publicar algo aqui! Bom, hoje eu venho trazer um sisteminha que é bem utilizado atualmente.
    Estou falando o Death System! Porém, com algumas coisinhas a mais.
     
    Testado em OTX Server 8.60..
     
    Como funciona?
    O Death System em alguns servidores possui um channel chamado "Mortes" ou "Death Channel",
    mas há alguns servidores que preferem que seja anunciado no default mesmo e a função é informar
    quem matou quem, ou quem foi morto por certo monstro.
     
    O que há de novo?
    Bom, agora quem matar x jogadores(configurável) e essa quantia for uma consecutiva, será anunciado isso :

     
    E se algum jogador derrotá-lo dentro a consecutiva, será anunciado isso :

     
    Vamos ao sistema :
    em data/XML/channels.xml, adicione isso :
    <channel id="15" name="Death Channel"/> em data/creaturescripts/creaturescripts.xml :
    <event type="death" name="deathchannel" event="script" value="deathchannel.lua"/> em data/creaturescripts/login.lua, adicione isso antes do último return true :
    registerCreatureEvent(cid, "deathchannel") em data/creaturescripts/scripts, crie um arquivo deathchannel.lua e cole isso dentro :
    -- Coded by Zoom.. local info, win, lose = "%s [Level: %s] foi mort%s pelo %s %s%s", "%s obteve %s frags seguidos após derrotar %s.", "%s acabou de impedir que %s fizesse uma sequência de %s frags seguidos." local frags, storage = {10, 15, 20, 25, 30, 35, 40, 45, 50}, 30045 function onDeath(cid, corpse, deathList) if(not isPlayer(cid)) then return true end local target = deathList[1] doCreatureSetStorage(target, storage, getCreatureStorage(target, storage) + (getCreatureStorage(target, storage) == -1 and 2 or 1)) for _, pid in ipairs(getPlayersOnline()) do doPlayerSendChannelMessage(pid, '', info:format(getCreatureName(cid), getPlayerLevel(cid), getPlayerSex(cid) == 1 and "o" or "a", isPlayer(target) and "player" or "monstro", getCreatureName(target), isPlayer(target) and " [Level: "..getPlayerLevel(target).."]." or "."), TALKTYPE_CHANNEL_ORANGE, 0xF) for _, frag in ipairs(frags) do if(getCreatureStorage(target, storage) == frag) then doPlayerSendChannelMessage(pid, '', win:format(getCreatureName(target), frag, getCreatureName(cid)), TALKTYPE_CHANNEL_MANAGEMENT, 0xF) end if(getCreatureStorage(cid, storage) >= frag) then doPlayerSendChannelMessage(pid, '', lose:format(getCreatureName(target), getCreatureName(cid), getCreatureStorage(cid, storage)+1), TALKTYPE_GAMEMASTER_CHANNEL, 0xF) end end end doCreatureSetStorage(cid, storage, 0) return true end Há uma única configuração, que é as consecutivas :
    local frags = {10, 15, 20, 25, 30, 35, 40, 45, 50}
    completou 10 frags? anuncia! e assim sucessivamente..
     
    Créditos : EU
  14. Gostei
    davidvietro deu reputação a Jamison Collins em [Resolvido] Conversão de gold's no OT Tibia   
    Tente esse script :
    local coins = { [ITEM_GOLD_COIN] = { to = ITEM_PLATINUM_COIN, effect = TEXTCOLOR_YELLOW }, [ITEM_PLATINUM_COIN] = { from = ITEM_GOLD_COIN, to = ITEM_CRYSTAL_COIN, effect = TEXTCOLOR_LIGHTBLUE }, [ITEM_CRYSTAL_COIN] = { from = ITEM_PLATINUM_COIN, to = 2159, effect = TEXTCOLOR_TEAL }, [2159] = { from = ITEM_CRYSTAL_COIN, effect = TEXTCOLOR_YELLOW } } function onUse(cid, item, fromPosition, itemEx, toPosition) if(getPlayerFlagValue(cid, PLAYERFLAG_CANNOTPICKUPITEM)) then return false end local coin = coins[item.itemid] if(not coin) then return false end if(coin.to ~= nil and item.type == ITEMCOUNT_MAX) then doChangeTypeItem(item.uid, item.type - item.type) doPlayerAddItem(cid, coin.to, 1) doSendAnimatedText(fromPosition, "$$", coins[coin.to].effect) elseif(coin.from ~= nil) then doChangeTypeItem(item.uid, item.type - 1) doPlayerAddItem(cid, coin.from, ITEMCOUNT_MAX) doSendAnimatedText(fromPosition, "$$", coins[coin.from].effect) end return true end Com essa tag :
    <action itemid="2159" event="script" value="other/changegold.lua"/> Créditos: Sofft (de acordo com Daaniel)
  15. Gostei
    davidvietro deu reputação a xWhiteWolf em Tibia está zerado + preview [GPS SYSTEM]   
    Graças ao nosso marvilhoso colega Elwyn o tibia foi zerado hoje dia 09/03/2015 haha.   Ele lançou uma função crucial pra fazer qualquer script relacionado à movimentação ao combinar o algoritmo de pathFinding da source à uma função Lua.
    Sei que muita gente não frequenta a seção de programming OU não entendeu nada doque eu falei mas pqp, deem uma rápida olhada noque dá pra criar:



    Isso é um GIF de um sistema que eu to tentando fazer desde novembro de 2014 e que agora eu finalmente consegui terminar graças à genialidade desse mito. Trata-se de uma talkaction que vc digita !Lugarquevcquerir e o personagem vai andando automaticamente até o local e quando chega ele manda uma msg avisando que vc chegou ao destino, semelhante a um GPS!!!!!11111
    Fora que com isso podemos controlar os movimentos do NPCS!!!!111 Dá pra fazer uma fucking quest que vc tem que seguir o npc até um altar secreto e seilá, ele é um npc normal que vende backpack/rope/shovel mas qnd dá 18h de um certo dia ele visita a tumba e volta pra cidade (e vc tem que seguir ele pra descobrir isso). SUCH RPG!!!!!
    Sei lá, eu animei demais com isso >.<     
    As possibilidades são tantas que eu não consigo nem me conter AUHIEUHIUHI dá pra fazer MUITA coisa cara, inclusive vou tentar trazer os scripts relacionados à essa função pra vocês.

    Se você gostou das idéias, sério, não clica em gostei no meu tópico, vai lá no tópico do elwyn e clica... ele é o verdadeiro mito que resolveu isso.


     
  16. Gostei
    davidvietro deu reputação a xWhiteWolf em Magnus Challenger   
    Fala galera, hoje vim trazer o projeto pronto do Magnus Challenger pra vocês instalarem no servidor de vocês!   

    Pra quem não conhece é um sistema de Tasks baseado no Zezenia onde você pode escolher entre tasks de matar monstros ou de coletar certos items para o npc Magnus, um guerreiro famoso da cidade que está atolado de tarefas e precisa da sua ajuda!

    Peguei os aspectos que eu julguei serem os principais do modelo do Zezenia e editei com algumas coisas que eu achei que ficariam melhores.
    Quem quiser pode ver um vídeo comentado de como o sistema funciona:




    Dito isso vou ensinar vocês como instalar isso no server:
    Pra começar vá em data\creaturescripts\scripts e procure login.lua, agora vá até o final do arquivo e antes do último return true coloque essas linhas abaixo

    ainda em creaturescripts procure creaturescripts.xml e adicione essa linha junto com as outras que já estão lá (seguindo o padrão)
    <!-- TASK SYSTEM --> <event type="kill" name="tasksystem" script="tasksystem.lua"/> Agora crie um arquivo em creaturescripts\scripts com o nome de tasksystem.lua e adicione o seguinte à ele:




    Terminada a parte da contagem de kill vamos ao NPC em si.
    Crie um arquivo chamado Magnus.xml em data\npc e coloque isso dentro dele:




    Agora em data\npc\scripts crie um arquivo chamado zezeniaa.lua e adicione esse conteúdo dentro do arquivo:





    ~~~~~~~~~~~~~~~~ FEITO ISSO ESTÁ TERMINADO ~~~~~~~~~~~~~~~~~~

    Agora aprendendo a configurar:
     
    No tasksystem vc pode editar isso daqui:
    Eu fiz um sistema onde se vc estiver em party com alguém e a pessoa matar os bixos conta como se você tivesse matado; Assim incentiva o pessoal a ir numa cave de Dragon e ao invés de matar quem está lá pra ficar sozinho na cave, eles vão chamar party pra fazerem a task juntos.. assim fazer amigos fica mais fácil e com maiores laços é maior a chance do povo não abandonar o seu server.

    Apenas digite "true" ou "false" pra ativar/desativar esse sistema e em baixo temos a distancia máxima pro monstro estar do cara que está fazendo a task pra contar o kill. Se a distancia entre o monstro e a pessoa for maior que 7 não vai contar pra ele a kill.


    No zezeniaa.lua as coisas que dão pra configurar são maiores mas são igualmente simples:
    Toda vez que vc pedir uma task short (curta) vc vai ter de 100 a 400 monstros pra matar, ele gera um número de 0 a 6 e multiplica por 5 e soma com os 100 iniciais.. o mesmo vale pra todos os outros valores.

    levelcollect é o level mínimo pra fazer tasks do tipo collect.
    time é o tempo em segundos que você vai ficar sem poder falar com o npc caso desista de alguma task, o padrão é 8 * 60 * 60 (8 horas)
    bonus é por quanto vai multiplicar caso vc permita que o npc escolha aleatoriamente entre todas as opções.. o padrão é 20% de bonus (1.2)
    multiplicador é uma coisa que eu adicionei pra ficar mais fácil mexer na fórmula sem cometer cagadas, se vc tá ganhando 10% de exp e quer ganhar 80% é só colocar 8 no multiplicador.

     
    Isso daqui é o banco de dados principal do sistema de kill, toda vez que vc escolher uma task do tipo fácil, médio, dificil ele vai acessar essas tabelas contendo o nome das criaturas.. vc pode facilmente adicionar novos nomes, o npc já está programado pra lidar com isso, apenas siga o padrão e mantenha sempre o último sem vírgula!

    Ex: adicionando Morgaroth na tabela de hard
    local hard = { [1] = "Giant Spider", [2] = "Dragon Lord", [3] = "Grim Reaper", [4] = "Demon", [5] = "Crystal Spider", [6] = "Demon Skeleton", [7] = "Juggernaut", [8] = "Destroyer", [9] = "Hand of Cursed Fate", [10] = "Morgaroth" } atente-se também pra não repetir o número no index.. se o anterior era [9] use [10].

    O restante das tabelas são separadas para o banco de dados das tasks de collect:
     
    segue a mesma lógica da de kill só que aqui você tem o id dos itens que serão usados... aquela count não tem nada a ver com o item pois ele vai gerar tanto o item aleatoriamente quanto à count;
    Ex: 
    [1] = {id = 5880, count = 20}, -- iron ore isso não significa que se cair iron ore (id 5880) irá cair sempre 20.. até porque eu poderia escolher uma task long e easy e pegar a task de trazer até 50 iron ores, apenas tente manter os padrões que são os intervalos definidos.
    No easy ele varia de 10 a 20, no medium ele varia de 20 a 35 e no hard de 40 a 50.



    Espero que vocês tenham curtido, é um sistema grande mas bem simples de se mexer... se tiverem quaisquer problemas podem comentar aqui. Deu trabalho fazer isso então se você gostou deixe o seu comentário aí e o seu "Gostei" que vai me incentivar a trazer mais coisas desse tipo pra cá. Abraços do lobo.


    PS: Pra sumonar o npc digite com o GOD: /n Magnus ou coloque ele pelo map editor.
  17. Gostei
    davidvietro deu reputação a psychonaut em removido   
    deleta o topico
  18. Gostei
    davidvietro deu reputação a PLoOc em [Utilitário] SearchMyFiles   
    Olá pessoal, boa noite!
    Recentemente tive um problema irritante no meu servidor, onde aparecia a mensagem:
    [Warning - Monster::Monster] Unknown event name - tp
     
    Ao perguntar aqui na comunidade desobri onde era o problema, porém pra conseguir elimina-ló era necessário abrir um por um os arquivos pra descobrir a linha <event> e eliminá-la ou edita-lá afim de sanar o problema. Bem... no menu de pesquisa do windons podemos apenas pesquisar os títulos e subtítulos e não o que há dentro deles.
     
    Pesquisei um pouco e descobri um programa chamando SearchMyFiles que além de pesquisar de forma eficiente, também faz pesquisa de palavras-chave dentro dos arquivos, sendo assim filtrando precisamente o foco da sua dúvida. Adicionei ao arquivo a palavra event e ele me mostrou todos os arquivos dentro da pasta monsters onde tinha a linha escrita <event>.
     
    Resumindo:
    Ele não pesquisa títulos de arquivos e sim conteúdos escritos dentro de arquivos.
     
     
     
    Estou trazendo para a comunidade afim de ajudar quem está com problemas na distro e quer deixá-la mais agradável ao rodar sem medo de debugs.
    http://www.portablefreeware.com/index.php?id=1485
     
    Valeeu!
  19. Gostei
    davidvietro deu reputação a dezon em Dezon OT Admin [restarter]   
    Olá pessoal!
     
    Venho trazer um aplicativo que eu desenvolvi para ser um "restarter" simples e eficaz !
     
    Dezon OT Admin
     
    [+] Funções
    - Restarter
    - Inicia junto com o windows e roda o otserver caso assim configurado
    - Logs completos
    - Você pode salvar os logs em arquivos
    - Não dá erro no config.lua !!!
    - Pode minimizar ao tray 
     
    [+] Atualização
    - Adicionado a função para desativar/ativar o relatório de erros do windows
    - [NOVO] Adicionado linguagem português e inglês
     
    [+] Imagens



     
     
    [+] Scan
    - Clique aqui para acessar o scan
     
    [+] Downloads
    - .Net Framework 4.0 (instalador web)
    - Dezon Ot Admin
     
     
    Obrigado !!!
  20. Gostei
    davidvietro deu reputação a Orochi Elf em [OrochiElf] New OTRestarter v1.0   
    New OTRestarter
    version: 1.0
    developer: Tony Araújo (OrochiElf) pt. Gabriel Nogueira (Idéias)
     
     
    Funções:
    - Auto Restarter (Ele inicia o servidor assim que ele não detectar mais que o processo está ativo, ou seja, toda vez que o seu servidor fechar sozinho, o programa automaticamente irá reconhecer e irá reinicia-lo.)
     
    - Auto Crash Timer (Uma nova função inédita foi adicionada, esta função é responsável por detectar quando o processo do servidor para de funcionar, algo que acontece frequentemente, então ele irá reconhecer e reiniciar o processo.)
     
    - Auto Restarter Timer (Outra função nova adicionada nesta versão, esta função é responsável por programar os horários que você deseja reiniciar o seu servidor. ela é bastante usada para evitar o desperdício de memória usada no consumo do processo do servidor, ou seja, quando um servidor está ativo por muito tempo o gasto de memória aumenta, então esta função irá reiniciar o processo do seu servido de acordo com os horários que você marcar.
     
    Para próxima versão:
    - OTRestarter hosting (Esta função será uma inovação bastante bacana, ela dará o direito de você acessar o Restarter *que estará provavelmente instalado no VPS/Dedicado do servidor* sem que a pessoa precise acionar a conexão remota, ou seja, funcionará parecido com um FTP Control, você poderá controlar o Restarter e ter acesso as informações gravadas no LOG do programa através de um simples client, deixando possível ser acessado em computadores diferentes, e em breve uma versão para mobile/celular.)
     
     
    Imagem do funcionamento do programa:

     
    Download:
    Programa anexado ao tópico.
    OTRestarter.rar
     
  21. Gostei
    davidvietro deu reputação a samlecter em (Resolvido)CONTEUDO RETIRADO.   
    Amigo, eu não entendo muito de scripts, a sugestão que eu dei realmente é trabalhosa e muito provavelmente existem outras formas melhores/mais fáceis de fazer, se puder explicar melhor ficaria grato e te daria rep+ mesmo não utilizando 
  22. Gostei
    davidvietro deu reputação a samlecter em Retornar para ball quando sair do fly/ride/surf   
    Que nada, pelo menos você tentou, agr que me disse isso, vou tentar olhar essas funções e ver se uma delas faz esse  creatureSetSkullType  sem que eu saiba, se eu conseguir resolver eu edito aqui
  23. Gostei
    davidvietro deu reputação a samlecter em [MOD] Sistema de Auto Loot   
    O sistema que usei não teve que criar/alterar nada na pasta mods, tanto que nos 2 scripts do autoloot não tinha essa parte que vc sugeriu trocar.
     
    No sistema que usei ( já veio na base(cyan) ) tem 2 scripts com nome aloot, um na pasta data\actions\scripts  e  outro na pasta data\creaturescripts\scripts
     
    OBS: Não sei se tem algo relacionado ao sistema em outro lugar, mas acho que são só esses 2 scripts.
  24. Gostei
    davidvietro deu reputação a thiagobji em Arrumando Erro npchandler.lua   
    É o seguinte, eu já sofri com esse bug e é muito chato mesmo, creio que muitas pessoas sofrem também, eu achei esse script em um outro fórum, então venho postar aqui pros membros do TibiaKing que tem esse mesmo erro para ajudar eles a soluciona-lo.



    Então você precisa ir até a pasta data\npc\lib\npcsystem

    Abra o arquivo npchandler.lua e procure (control+f) por "function NpcHandler:isInRange(cid)" (sem aspas)

    modifique essa linha:


    function NpcHandler:isInRange(cid) local distance = getNpcDistanceTo(cid) or -1 return distance ~= -1 and distance <= self.talkRadius end Por: function NpcHandler:isInRange(cid) local distance = getDistanceBetween(getCreaturePosition(getNpcCid()), getCreaturePosition(cid)) if(distance == -1) then return false end return (distance <= self.talkRadius) end

    Pronto! agora gogo deixar o servidor funcionando

    Créditos:
    GOD Gustavo
    Pardal1406
    Thiagobji
  25. Gostei
    davidvietro deu reputação a BrunoMaia em O que seria esse erro no console?   
    Isto é um erro de syntax, você esqueceu de digitar o "<" em algum local do código
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo