Alle volte capitano quesiti a cui può rispondere la formula del danno. Non sempre questa strada può essere una via praticabile però.
Per questo, oltre a mostrarvi solo alcune dei suoi possibili usi, vi inserirò un articolo di Yanfly sul perchè sconsiglia tale pratica.
Note sulle condizioni:
Una condizione nella sua forma più comune viene rappresentata con:
If(condizione)
{ *codice da sviluppare nel caso la condizione sia vera
}else{
*codice da sviluppare nel caso la condizione NON sia vera
}
Ma noi abbiamo solo una riga pre inserire il codice quindi abbiamo 2 vie praticabili:
1) scrivere la condizione if tutta su un unica linea
2) usare l'operatore ternario che ci semplifica la scrittura della condizione
Operatore ternario:
b.isStateAffected(10) ? 10000 : 1;
tutto ciò che viene prima del "?" è la nostra condizione (l'if che abbiamo usato prima)
quello che viene dopo il "?" è il codice che si attiva se la condizione è soddisfatta.
i ":" rappresentano l nostro else.
Quindi se la condizione non è soddisfatta si attiva il codice che si trova dopo i ":"
- Obiettivo:
- la a si riferisce sempre a chi compie l'azione
- la b si riferisce al bersaglio dell'azione
- Cambiare HP/MP/TP
gainHp(value) - ristora HP del valore indicato (valori negativi vanno in sottrazione)
gainMp(value) - ristora MP del valore indicato (valori negativi vanno in sottrazione)
gainTp(value) - ristora TP del valore indicato (valori negativi vanno in sottrazione)
es. a.gainHp(32)
setHp(hp) - setta HP al valore indicato
setMp(mp) - setta MP al valore indicato
setTp(tp) - setta TP al valore indicato
E.g. a.setHp(a.mhp)
E.g. a.setHp(a.hp + 100)
clearTp() - setta i TP a 0
- Stati e controllo
isStateAffected(stateId) - controlla se attaccante o difensore sono affetti dallo stato con un determinato ID
Es. b.isStateAffected(10) ? 10000 : 1;
isDeathStateAffected() - controlla se attaccante o difensore sono affetti dallo stato morte.
Es b.isDeathStateAffected() ? 10000 : 1;
resetStateCounts(stateId) - resetta i turni per uno stato in corso ad un determinato valore.
if (b.isStateAffected(10)) b.resetStateCounts(10); 100
addState(stateId) - aggiunge lo stato ad attaccante o difensore
if (!b.isStateAffected(10)) b.addState(10); 100
removeState(stateId) - rimuove lo stato ad attaccante o difensore
if (a.isStateAffected(10)) a.removeState(10); 0
- Buff e debuff:
addBuff(paramId, turns) - aggiunge il buff
a.addBuff(0, 3); b.def*10
addDebuff(paramId, turns) - aggiunge il debuff
b.addDebuff(2, 10); 9999
removeBuff(paramId) - rimuove il buff
removeAllBuffs() - rimuove il debuff
ID Parametri :
0 - Max HP
1 - Max MP
2 - Attack
3 - Defence
4 - Magic Attack
5 - Magic Defence
6 - Agility
7 - Luck
Codice veloce:
die() - uccide il bersaglio
b.die(); 0
revive() - rianima il bersaglio
a.revive(); 1000
paramBase(paramId) - prende il parametro base
a.paramBase(3)*10 - b.def*2
paramMax(paramId) - prende il massimo valore per il parametro
b.paramMax(0)
isStateResist(stateId) - controlla se il bersaglio resiste ad uno stato
es. c=0; b.isStateResist(10) ? c+=2000 : b.addState(10); c
Oggetti:
consumeItem(item) - consuma oggetti
a.consumeItem($dataItems[15]); 100
Solo Attori:
currentExp() - EXP correnti
currentLevelExp() - EXP needed for current level
nextLevelExp() - EXP needed for next level
nextRequiredExp() - EXP left until next level
maxLevel() - max level of actor
isMaxlevel() - is actor max level (true/false)
hasWeapon() - is actor wielding a weapon (true/false)
hasArmor() - is actor wearing any armor (true/false)
clearEquipments() - unequip everything actor is wearing
isClass(gameClass) - checks if actor is of a class (gameClass - $dataClasses[ID])
hasNoWeapons() - checks if actor doesn't have any weapons
levelUp() - levels actor up
levelDown() - level actor down
gainExp(exp) - gives actor exp
learnSkill(skillId) - makes actor learn a skill
forgetSkill(skillId) - makes actor forget a skill
isLearnedSkill(skillId) - checks if actor has a skill learned
actorId() - returns Actor's ID
Solo nemici:
enemyId() - returns Enemy's ID
Formule:
Math.random() - ritorna un valore numerico pseudocasuale compreso tra 0 e 1 (0 <= n < 1)
Ma esiste anche
Math.randomInt()- ritorna un valore numerico intero pseudocasuale compreso tra 0 e 1
Per ottenere quindi un valore casuale compreso tra 1 e ad esempio 20 faremo:
Math.randomInt(20)+1
Math.round(number) - Arrotonda un valore numerico all'intero più vicino
Math.ceil(number) - Arrotonda un valore numerico all'intero in eccesso
Math.floor(number) - Arrotonda un valore numerico all'intero in difetto
Articolo di Yanfly che ne sconsiglia l'uso per alcune dinemiche:
http://www.yanfly.mo...Damage_Formulas
Quindi dosate bene questa possibilità e valutate sempre se una formula più complessa può fare al caso vostro oppure no.
Buon making a tutti!
Modificato da Ischenderun, 26 April 2022 - 13:50 PM.