🤔 Para Refletir :
"Fazer um jogo é sempre muito mais difícil do que jogar um jogo..."
- Rafael_Sol_MAKER

RPG Maker MV [RM MV] Alterar custo maximo do tp

Ademir Masculino

Novato
Membro
Membro
Juntou-se
14 de Março de 2021
Postagens
3
Bravecoins
7
Fala galera.
Tenho começado a mecher nos códigos do jogo afim de fazer algumas mudanças experimentais, nunca estudei javascript, mas vendo os códigos e entendendo o ''padrão'', digamos assim, consigo me virar com uma coisa ou outra.
A ultima idéia que tive foi a de alterar o custo do tp, baseado na agilidade do personagem. O que consegui, ja está funcionando, o que está me atrapalhando agora é que essa alteração do custo do tp não so diminui, mas se a agilidade do personagem for muito baixa, ela também aumenta, e é ai que ta o problema.
Quando o custo de tp da habilidade fica maior do que 100, ele não mostra o custo e nem da pra usar(o que até ai é aceitavel, não queria que desse pra usar mesmo, porém se mostrasse o suposto valor acima de 100, seria bem visto, apesar de pode ser um capricho) o verdadeiro problema, é que por algum motivo o personagem não consegue usar nenhuma ação quando isso acontece, desde atacar normal, com uma habilidade sem custo, usar item, proteção ou até mesmo fugir.
Ja fiquei muito tempo procurando nos códigos algo que resolvesse mas não achei. Procurei por um possível custo maximo de tp, porém não achei, achei apenas o maxTp
que mesmo se alterado, não muda em nada o meu problema.
Se alguém conseguir entender a meu problema e puder me ajudar, serei muito grato. Vlw rapaze.
 
Ok, na verdade eu só mudei o cálculo de custo do tp de:

Game_BattlerBase.prototype.skillTpCost = function(skill) {
return skill.tpCost;
};

Para:

Game_BattlerBase.prototype.skillTpCost = function(skill) {
if (this.agi >= 10) {
return skill.tpCost * (100 / (100 + (this.agi - 10) * 20));
} else {
return skill.tpcost * (2- (100 / (100 + ((this.agi - 10) * -1) * 20)));
}
};
 
Isso tá bem confuso. Inclusive o custo que vc a adicionando pode gerar alguns erros de precedência no cálculo. Eu recomendaria fazer a conta ante do return inclusive.

Ok...

1) Vc quer mudar o custo em to da skill... Isso eu entendi.
2) Seu objetivo é fazer o custo variar conforme a agilidade correto?

Minha primeira dúvida é: Qual a relação que vc quer estabelecer entre a agilidade e o custo em tp?

Eu suponho que vc queira diminuir o custo conforme a agilidade aumenta certo? Ou não?
 
Então, voce está correto, o objetivo é o custo do tp variar conforme a agilidade.
Sempre achei a agilidade padrão dos rpgs de turno em geral muito rasa, apenas alterar a ordem em que os personagens vão agir (não queria atribuir valor a agilidade apenas colocando ela em formulas de ataque fisico, por exemplo), sempre quis atribuir a velocidade do personagem, e quantas ações ele pode fazer, mesmo usando o rpg por turno raiz.
Ai a ultima idéia que tive foi de que todas as skills vão custar tp, e o tp então seriam os pontos de ação ou ''tempo'' em que leva para se usar uma skill, por isso a relação de agilidade com o tp, quanto mais agilidade, mais rápido o personagem, logo custará menos tempo para usar as skills, porém, não sei se por uma bobeira minha, os custos também podem diminuir se o personagem for muito lento.
Deixe-me tentar explicar melhor essa parte:
Basicamente todos os parâmetros desse projetos irão de 1 a 20, com a idéia de se assemelhar a um rpg de mesa, aonde a idéia é com que o personagem com 10 de tal parâmetro, está na média, considerada uma pessoa normal nesse parâmetro, e quanto mais distante de 10, tanto pra menos quanto pra mais, o personagem tiver de um parâmetro, significa o quão bom o ruim ele é naquele parâmetro.
Agora deixe me tentar te explicar qual a idéia por detrás do meu código (que foi como eu consegui chegar ao resultado que eu queria inicialmente, como eu disse, não sei quase nada de javascript ou outra linguagem de progamação, provavelmente a maneira que fiz é bem menos eficiente do que poderia ser, se estiver muito ruim e vocês tiverem algumas dicas para melhorar o código, serei muito grato):

if (this.agi >= 10); :
Como eu disse a idéia é que se o personagem tiver a agilidade abaixo de 10, ele mais lento que o normal, e acima de 10, consequentemente é mais rapido. então se agilidade maior que 10, ele vai fazer uma conta que reduz o custo da habilidade, e se menor uma que aumenta(o valor de 9 e 11 vão alterar a mesma quantidade do custo, só que 9 vai ser um percentual de 117% do custo, e o de 11 será 83% )

skill.tpCost * (100 / (100 + (this.agi - 10) * 20));
skill.tpcost * (2- (100 / (100 + ((this.agi - 10) * -1) * 20)));:

Basicamente a idéia dessa conta veio com algo parecido com o softcap do dark souls, onde quanto mais você investe em uma habilidade menos eficaz ela fica, afim de evitar valores muito altos de redução, chegando ao ponto em que as habilidades custariam 0 por exemplo. Então peguei o cálculo de mr e armadura do league of legends, e readaptei para os valores do meu projeto, sendo alguns resultados:
Da primeira conta(>=10):
10 = 100% (valor original da skill); 15 = 50%(reduz pela metade); 20 = 33%(1/3 do custo original);
Da segunda conta(<10):
5 = 150%; 1 = 164%

Espero que tenha dado pra entender, desde ja agradeço pela atenção e pela ajuda =D
 
Ok. Então vamos pensar...
Com AGI =10, o custo de TP é de 100%.
Para cada +1 de AGI, o custo em TP diminui 10% certo?
Da mesma forma, para cada -1 AGI o custo diminui 10%?
-----------------------------
Se for isso, basicamente o que tem que fazer é multiplicar o skill.tpCos por ( 2 - (AGI /10) )

Neste caso específico estou considerando que o valor máximo que AGI pode alcançar é 20, como vc mencionou.

nota:
depois de multiplicar vc vai ter que converter o resultado pra um número inteiro.

Eu faria algo asim:
Javascript:
Game_BattlerBase.prototype.skillTpCost = function(skill) {
    var custo = skill.tpCost * (2- (this.agi /10))
    return Math.round(custo);
};
 
Voltar
Topo Inferior