Ir para conteúdo
Banner com Efeitos

Gabrielxxxxx

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Gabrielxxxxx deu reputação a Yamili em (Resolvido)Skill Rate/Velocidade para upar skill   
    @BangxD
    Quando treinamos uma skill (fist, axe, sword...) os níveis mais baixos dela (do nível 1 ao 2, 3, 4, 5) sempre é muito fácil de upar.
    Mesmo com skill rate em 1x e o multiplier do vocations em 1.0 ainda era "fácil" (rápido) demais para o que eu queria.
    Exemplo para contexto (Só para contexto)
    Ao treinar a sword skill do nível 0 ao 1, você demoraria alguns segundos para chegar ao nível 1 (Isso se não upar rapidamente do 0 ao 9,10,11 e tals).

    Com essa alteração que eu fiz, para upar uma skill nos níveis mais baixos fica bem difícil (depende do quanto de dificuldade você quer).
    Na parte que eu editei no tópico também tem uma breve explicação minha.
    Mas se tu não entendeu essa parte vou dar outros exemplos abaixo.

    - Fórmula - (da source)
    (skillBase[skill] * std::pow(skillMultipliers[skill], (level - 11)));
    - Valores de testes, o máximo que consegui dificultar sem alterar na source -
    Com o skill rate (que você configura no config.lua) em 1x
    Multipliers de sword (que você configura no vocations.xml) em 1.0
    O baseskill (que é configurado na source, se não me falha a memória é em vocation.cpp) em 50
    E (level - 11) como padrão

    ! Com a sword skill no nível 1 !
    A cada 1 hit que eu dou em um monstro/player com uma sword, eu vou upar 2% da barra de sword skill.

    Então ao alterar o baseskill de 50 para -> 100 
    A cada 1 hit que eu dou em um monstro/player com uma sword, eu vou upar 1% (Ou 1,5%) da barra de sword skill. 

    Ou seja, alterando o baseskill eu consigo dificultar para upar a skill em níveis baixos.
    A cada +50 de skill base = [ -0,5% para upar a skill ao dar um hit ]

    - Valores atuais no meu servidor - 
    Skill rate: 1x (config.lua)
    Multipliers: 1.0
    Baseskill: 4000

    vocation.cpp  (baseskill)


    vocation.xml (multipliers)



    Se ainda estiver com dúvidas pode me perguntar.
    Perdão a demora para responder. 
    C ya!
     
     
  2. Gostei
    Gabrielxxxxx deu reputação a Naze em (Resolvido)Skill Rate/Velocidade para upar skill   
    É possivel, você so precisaria fazer um calculo que anule o calculo feito das 'skill_tries' necessaria pra dar o up, que vc pode achar em "Vocation::getReqSkillTries" no vocation.cpp, Ou modificar essa função para ser um valor fixo pra up.
     
    Nenhuma, como falei na primeira pergunta ela não diminui a velocidade e sim a "experiencia" que vc ganha da skill é cada vez mais necessaria para upar. è a mesma forma que acontece com Level, mas com outros cálculos. No caso é a função "Vocation::getReqSkillTries".
     
    Não entendi direito a pergunta, mas pra essa e qualquer outra do tipo, tudo possível so saber oq e onde modificar,
     
    Tudo é possivel... por script o que citou no topico ja te da um exemplo de como mudar com 
    doPlayerSetRate(cid, skill, skillRate)
  3. Gostei
    Gabrielxxxxx deu reputação a Yamili em (Resolvido)Skill Rate/Velocidade para upar skill   
    Qual servidor ou website você utiliza como base?
    TFS 0.4 8.60

    Olá a todos, eu gostaria de deixar bem (bastante) difícil para os jogadores uparem as skills (Do fist ao shield) nos valores mais baixos (Do 0 ao 25), o que ocorre é que não consigo deixar mais difícil de upar do que alguns segundos (Uns 2% da barrinha de skill a cada hit) para upar 1 skill level (Nos valores mais baixos, como upar do skill level 1 para o 2).

    Tem alguma forma de dificultar (mais ainda) a velocidade de up da skill nos valores mais baixos?
     
    Informações extras:
    Eu testei de várias formas e percebi que o mínimo de rate skill que dá pra colocar é 1x (Seja no config.lua ou em script de skills por stages).
    No vocations.xml do meu servidor a linha:
    <skill fist="1.5" club="1.5" sword="1.5" axe="1.5" distance="1.5" shielding="1.5" fishing="1.5" experience="2.0"/> Que serve para definir a velocidade com que a skill vai upar tem o valor minimo de "1.0", abaixo disso não upa (No meu servidor quanto menor o número, menor a velocidade que vai upar a skill).
    Tendo isso em mente eu testei com rate skill 1x no config e com skill fist="1.0" na tag das vocations (Que foi o mais lento que consegui colocar para upar nos níveis mais baixos das skills) mas ainda assim não é lento o suficiente para mim.
    O script de stages que eu estava usando para alguns testes era o:
    Eu reparei que esse script pega o valor do skill rate definido no config.lua e multiplica pelo valor definido no script, e como no magic level dá pra colocar valores como 0.3x (deixando assim extremamente difícil de upar) eu tentei fazer o mesmo com as skills e não tive sucesso.
    Nesse script dá para colocar um limite de skill level (Que vai setar a rate skill para 0x) e reparei que quanto mais perto de chegar no limite, mais difícil de upar fica (Do modo que eu quero para os valores baixos).

    Minhas dúvidas: 
    É possível ajustar esse script para fazer a velocidade do up ser sempre igual a velocidade de quando está chegando no limite de skill? (Se é que esta diminuição está sendo aplicada por este script)
    Qual a função que faz essa velocidade diminuir perto do limite de skill? (O que está fazendo ela diminuir?)
    É possível de alguma forma abaixar o rate de skills para 0.X?
    É possível dificultar, extremamente, para upar as skills nos valores mais baixos? (Seja por script ou pela source)

    Ps: 
    Sou bem leigo se tratando de scripts e tals, então me desculpem se não consegui me expressar bem.
    Perdão se eu não estiver na área correta, não estou acostumado com fóruns ainda.

    Obrigado a todos que tentarem me ajudar, peço perdão pelo texto enorme ? é justamente para evitar algumas dúvidas sobre o que eu estou tentando fazer.
    Caso ainda tenham dúvidas sobre algo que eu disse, me perguntem.
    E caso exista algum tópico sobre algo relacionado ao que eu quero, por favor, me mostrem. Não achei nada parecido sobre isso ?

    ! :EDIT: ! - :!Duvida solucionada!:
    Como o @Naze me guiou ao caminho de onde fica a formula na source, eu resolvi fazer alguns testes para entender melhor como funcionava.
    A formula é: 
    (skillBase[skill] * std::pow(skillMultipliers[skill], (level - 11))); E entendi que é baseskill × multiplier do vocations ^(level da skill - 11), com os valores do meus servidor ficariam:
    50 x 1.0 ^ (level - 11) (Onde com rate skill 1x cada hit upava cerca de 2% da barra de skill, o que me levou a crer que eram os hits necessário para upar)
    Então eu resolvi testar essa baseskill e aumentei para 100, o que resultou em 1% da barra por hit. (Que no caso a cada +50 de skill base = [ -0,5% para upar a skill ao dar um hit])

    E seguindo isso consigo ajustar certinho a dificuldade que quero para upar skill.
    Se essa alteração na baseskill pode acarretar em algum problema me avisem, por favor (Pois não entendo muito de programação).
    Mas caso não acarrete em nenhum problema, funcionou perfeitamente para o que eu queria então.
    Para quem quer fazer o mesmo (Dificultar para upar a skill nos níveis mais baixos [como do skill level 0 ao 1]) está ai.
    Duvida encerrada! Rep++ @Naze Por me ajudar ^-^ ajudou muito mesmo, de coração, agradeço.  
     
  4. Curtir
    @chateadoagr não dou suporte fora do fórum, se está com problema em relação ao meu tutorial basta comentar que ajudarei.
    Mas acho que posso chutar o problema.
    Debug ? Se sim é porquê é necessário também você alterar no código fonte do servidor!!
  5. Gostei
    Salve galera, a pedido dos membros: @zangoosedoido, @leozincorsair, @themapa, @ZikaLord, dentre outros membros via pm não citados, estarei trazendo um tutorial de como aumentar o limite de ShootEffects(missiles, distanceEffect) no client 8.54 para mais de 255.
     
    Informação: É necessário fazer as devidas alterações na source para ShootEffects, não basta fazer somente no client!
    AVISO: Esse tutorial é somente para a versão 8.54, caso deseja fazer isso na versão 8.60, siga meu outro tutorial para o mesmo, clicando aqui!
     
    Vamos ao tutorial, baixe o Ollydbg, programa que usaremos para fazer as alterações, você poderá encontrar o download no final do tópico.
    Inicie o OllyDbg, e selecione o client:
     
    Depois de selecionar, pressione CTRL+G e procure pelo seguinte endereço: 00410576
     
    Você vai cair em cima dos endereços a ser alterado:
     
    Feito isso, dê dois clicks no primeiro endereço e altere para: CALL 004F4FF0
     
    Dê dois clicks no segundo endereço, no caso o que está abaixo do primeiro que foi alterado, e mude para: MOVZX EAX, AX
     
     
    Pronto, agora iremos salvar as alterações feita no client:
     
    Pronto, seu client já está modificado. Agora curta e faça bom proveito dos 65k de slots de shootEffects. Hehehe! xD
     
    Download: Download do OllyDbg
    Scan: Scan do OllyDbg
     
    O vírus encontrado no OllyDbg, não é nada mais nada menos que um falso-positivo, por ser um programa que altera tudo que você quiser em algum soft, e programas com tal capacidade, pode ser interpretado como maligno por alguns anti-vírus! 
     
    Créditos = {
    ["KotZletY"] = "Feito o tutorial",
    ["Fernando Prado"] = "Parça que me ensinou os macetes, dentre muitos outros."
    }
  6. Curtir
    Gabrielxxxxx deu reputação a L3K0T em Setando -1 na storage quando desloga e dando erro na distro   
    function onCastSpell(cid, var) if not isCreature(cid) then return false end local storage, storage2 = 55512, 55513 local stage = getPlayerStorageValue(cid, storage) or 0 local waittimes = {30, 30, 40, 50, 60} local waittime3 = 310 if exhaustion.check(cid, storage2) then doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage2) .. " segundos para usar a spell novamente.") return false end if stage > 0 then doPlayerSendCancel(cid, "Você já está sob o efeito da spell.") return false end setPlayerStorageValue(cid, storage, 1) local function advanceStage() if not isCreature(cid) then return end local currentStage = getPlayerStorageValue(cid, storage) if currentStage == nil or currentStage < 0 then currentStage = 0 end if currentStage < #waittimes then setPlayerStorageValue(cid, storage, currentStage + 1) addEvent(advanceStage, (waittimes[currentStage + 1] or 30) * 1000) else setPlayerStorageValue(cid, storage, -1) end end addEvent(advanceStage, waittimes[1] * 1000) exhaustion.set(cid, storage2, waittime3) ) if OpenGate then OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1) else print("Função OpenGate não encontrada.") end addEvent(function() if isCreature(cid) then setPlayerStorageValue(cid, storage, -1) end end, (waittimes[#waittimes] or 30) * 1000) return true end  
  7. Curtir
    Gabrielxxxxx deu reputação a L3K0T em Setando -1 na storage quando desloga e dando erro na distro   
    ta faltando stopEvent(eventName) ao deslogar
     
  8. Curtir
    Gabrielxxxxx deu reputação a L3K0T em Setando -1 na storage quando desloga e dando erro na distro   
    function onCastSpell(cid, var) if not isCreature(cid) then return false end local storage, storage2 = 55512, 55513 local stage = getPlayerStorageValue(cid, storage) or 0 local waittimes = {30, 30, 40, 50, 60} local waittime3 = 310 if exhaustion.check(cid, storage2) then doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage2) .. " segundos para usar a spell novamente.") return false end if stage > 0 then doPlayerSendCancel(cid, "Você já está sob o efeito da spell.") return false end setPlayerStorageValue(cid, storage, 1) local function advanceStage() if not isCreature(cid) then return end local currentStage = getPlayerStorageValue(cid, storage) if currentStage < #waittimes then setPlayerStorageValue(cid, storage, currentStage + 1) addEvent(advanceStage, waittimes[currentStage + 1] * 1000) else setPlayerStorageValue(cid, storage, -1) end end addEvent(advanceStage, waittimes[1] * 1000) exhaustion.set(cid, storage2, waittime3) OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1) addEvent(function() if isCreature(cid) then setPlayerStorageValue(cid, storage, -1) end end, waittimes[1] * 1000) return true end  
  9. Você Tentou
    Gabrielxxxxx deu reputação a Nolangg em Setando -1 na storage quando desloga e dando erro na distro   
    O que o rapaz acima falou pode ser usado também. mas, teste assim também:

     
    function onCastSpell(cid, var) local storage = 55512 local storage2 = 55513 -- Exhaust local waittimes = {30, 30, 40, 50, 60} local waittime3 = 310 if not isCreature(cid) or exhaustion.check(cid, storage2) then doPlayerSendCancel(cid, "Aguarde " .. (exhaustion.get(cid, storage2) or 0) .. " segundos para usar a spell novamente.") return false end if getPlayerStorageValue(cid, storage) > 0 then doPlayerSendCancel(cid, "Você já está sob o efeito da spell.") return false end setPlayerStorageValue(cid, storage, 1) exhaustion.set(cid, storage2, waittime3) OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1) local function advanceStage() if not isCreature(cid) then return false end local stage = getPlayerStorageValue(cid, storage) if stage < #waittimes then stage = stage + 1 setPlayerStorageValue(cid, storage, stage) addEvent(advanceStage, waittimes[stage] * 1000) else setPlayerStorageValue(cid, storage, -1) -- Reseta a storage ao final dos estágios end end addEvent(advanceStage, waittimes[1] * 1000) addEvent(function() if isCreature(cid) then setPlayerStorageValue(cid, storage, -1) end end, waittimes[1] * 1000) return true end  
  10. Você Tentou
    Boa noite @Gabrielxxxxx, essa função advanceStage é chamada algumas vezes num intervalo de tempo e ela tenta setar a storage no player, se ele estiver deslogado vai dar esse erro, pois o servidor não encontra o player. É só adicionar um check nela, assim:

     
    -- Função para avançar para o próximo estágio após o término do atual local function advanceStage() -- checa se o player/creature existe if not isCreature(cid) then return false end if stage < #waittimes then stage = stage + 1 setPlayerStorageValue(cid, storage, stage) -- Programar o próximo avanço de estágio addEvent(advanceStage, waittimes[stage] * 1000) else -- Resetar a storage quando todos os estágios terminarem setPlayerStorageValue(cid, storage, -1) end end  

Informação Importante

Confirmação de Termo