Files
andors-trail/AndorsTrailEdit/Editor_Monster.js

74 lines
2.9 KiB
JavaScript

function createMonsterEditor(obj) {
if (!obj.maxAP) { obj.maxAP = 10; }
if (!obj.size) { obj.size = "1x1"; }
var div = $( "#templates #editMonster" ).clone();
applyCommonEditorBindings(div, obj, model.monsters);
checkboxHidesElement(div.find('#hasConversation'), div.find('#hasConversationDisplay'), obj.phraseID);
checkboxHidesElement(div.find('#hasCombat'), div.find('#hasCombatDisplay'), obj.attackChance);
checkboxHidesElement(div.find('#hasCritical'), div.find('#hasCriticalDisplay'), obj.criticalChance || obj.criticalMultiplier);
checkboxHidesElement(div.find('#hasHitEffect'), div.find('#hasHitEffectDisplay'), obj.hasHitEffect);
imageSelector.imageify(div.find('#monsterimage'), div.find('#iconID'), 'monsters');
bindFieldToDataStore( $( "#droplistID", div ), model.droplists );
var createNewCondition = function() { return { chance: 100, magnitude: 1 }; }
if (!obj.onHit_conditionsSource) obj.onHit_conditionsSource = [];
if (!obj.onHit_conditionsTarget) obj.onHit_conditionsTarget = [];
var setupEditor = function(div) {
bindFieldToDataStore( $( "#condition", div ), model.actorConditions );
}
applyTableEditor({
table: $( "#onHit_conditionsSource", div ),
dialog: onHitConditionsDialog,
array: obj.onHit_conditionsSource,
templateFunction: createNewCondition,
editorSetup: setupEditor
});
applyTableEditor({
table: $( "#onHit_conditionsTarget", div ),
dialog: onHitConditionsDialog,
array: obj.onHit_conditionsTarget,
templateFunction: createNewCondition,
editorSetup: setupEditor
});
var expDependsOn = [];
var div100 = function(v) { return v / 100; }
var v = function(s) {
var field = $( s, div );
expDependsOn.push(field);
var val = field.val();
if (!val) return 0;
return parseInt(val);
}
var updateExperience = function() {
/*
final float avgAttackHP = t.getAttacksPerTurn(maxAP) * div100(t.attackChance) * t.damagePotential.averagef() * (1 + div100(t.criticalChance) * t.criticalMultiplier);
final float avgDefenseHP = maxHP * (1 + div100(t.blockChance)) + Constants.EXP_FACTOR_DAMAGERESISTANCE * t.damageResistance;
return (int) Math.ceil((avgAttackHP * 3 + avgDefenseHP) * Constants.EXP_FACTOR_SCALING);
*/
expDependsOn = [];
var EXP_FACTOR_DAMAGERESISTANCE = 9;
var EXP_FACTOR_SCALING = 0.7;
var attacksPerTurn = Math.floor(v("#maxAP") / v("#attackCost"));
var avgDamagePotential = (v("#attackDamage_Min") + v("#attackDamage_Max")) / 2;
var avgAttackHP = attacksPerTurn * div100(v("#attackChance")) * avgDamagePotential * (1 + div100(v("#criticalChance")) * v("#criticalMultiplier"));
var avgDefenseHP = v("#maxHP") * (1 + div100(v("#blockChance"))) + EXP_FACTOR_DAMAGERESISTANCE * v("#damageResistance");
var experience = (avgAttackHP * 3 + avgDefenseHP) * EXP_FACTOR_SCALING;
$( "#experience", div ).val(Math.ceil(experience));
};
updateExperience();
jQuery.each(expDependsOn, function(idx, o) {
o.change(updateExperience);
});
return div;
}