first works on shield attack support

This commit is contained in:
Koizumi85
2021-04-05 10:19:40 +02:00
committed by Kreuvf
parent 2f2ca76efc
commit 7bc73459bb
2 changed files with 94 additions and 12 deletions
@@ -1626,7 +1626,7 @@ The solution: convert the <input>s to type="text" and make them look like normal
.charsheet .sheet-hide-shield:not(:checked) ~ span.sheet-hideable-shield-active,
.charsheet .sheet-hide-parry-weapon:not(:checked) ~ div.sheet-hideable-parry-weapon-active,
.charsheet .sheet-hide-parry-weapon:not(:checked) ~ span.sheet-hideable-parry-weapon-active {
display: none;
display: none;
}
.charsheet .sheet-hide-melee-weapon-1:checked ~ div.sheet-hideable-melee-weapon-none,
@@ -16011,19 +16011,37 @@ function migrateTo20200809(migrationChain) {
}
function migrateTo99999999(migrationChain) {
getAttrs(["activeShieldRowId"], function(rowIdValues) {
var activeShieldRowId = rowIdValues["activeShieldRowId"];
getAttrs([
"kk", "NKW_Aktiv1", "NKW_Aktiv2", "NKW_Aktiv3", "NKW_Aktiv4", "NKW1_Schwellenwert", "NKW1_SchwellenwertKK", "NKW2_Schwellenwert",
"NKW2_SchwellenwertKK", "NKW3_Schwellenwert", "NKW3_SchwellenwertKK", "NKW4_Schwellenwert", "NKW4_SchwellenwertKK"], function(v) {
let attrsToChange = {};
for (var i = 1; i <= 4; i++) {
attrsToChange["NKW" + i + "_SB"] = calculateTpKKMod(v, i);
let variablesToGet = [ "kk", "AT_raufen", "sf_schildkampfI", "sf_schildkampfII", "sf_schmutzigetricks", "sf_knaufschlag", "NKW_Aktiv1", "NKW_Aktiv2", "NKW_Aktiv3", "NKW_Aktiv4",
"NKW1_Schwellenwert", "NKW1_SchwellenwertKK", "NKW2_Schwellenwert",
"NKW2_SchwellenwertKK", "NKW3_Schwellenwert", "NKW3_SchwellenwertKK", "NKW4_Schwellenwert", "NKW4_SchwellenwertKK"];
// Wenn es ein aktives Schild (oder Parierwaffe) gibt, möchten wir auch dessen Werte mit laden
if (activeShieldRowId) {
variablesToGet.push("repeating_shields_" + activeShieldRowId + "_shield_at_mod");
variablesToGet.push("repeating_shields_" + activeShieldRowId + "_shield_pa_mod");
variablesToGet.push("repeating_shields_" + activeShieldRowId + "_shield_type");
}
setAttrs(attrsToChange, {}, function(){
callNextMigration(migrationChain);
getAttrs(variablesToGet, function(values) {
let attrsToChange = {};
for (var i = 1; i <= 4; i++) {
let weaponTpkkModResult = calculateTpKKMod(values, i);
attrsToChange["NKW" + i + "_SB"] = weaponTpkkModResult.tpkkMod;
}
let result = calculateShieldAttack(values, activeShieldRowId);
attrsToChange["shield_at"] = result.shieldAt;
attrsToChange["shield_at_available"] = result.shieldAtAvailable;
setAttrs(attrsToChange, {}, function(){
callNextMigration(migrationChain);
});
});
});
}
@@ -17431,4 +17449,68 @@ function calculateTpKKMod(values, weapon) {
}
return tpkkMod;
}
// calculate shield attack value
on("change:repeating_shields change:sf_schildkampfI change:sf_schildkampfII change:sf_knaufschlag change:sf_schmutzigetricks", function(eventInfos) {
getAttrs(["activeShieldRowId"], function(rowIdValues) {
var activeShieldRowId = rowIdValues["activeShieldRowId"];
if (eventInfos.sourceAttribute && eventInfos.sourceAttribute.endsWith("_shield_active")) {
if (eventInfos.newValue === "on") {
activeShieldRowId = extractRowId(eventInfos.sourceAttribute);
} else if (eventInfos.sourceType === "player") {
activeShieldRowId = undefined;
}
}
let variablesToGet = [ "kk", "AT_raufen", "sf_schildkampfI", "sf_schildkampfII", "sf_schmutzigetricks", "sf_knaufschlag"]
// Wenn es ein aktives Schild (oder Parierwaffe) gibt, möchten wir auch dessen Werte mit laden
if (activeShieldRowId) {
variablesToGet.push("repeating_shields_" + activeShieldRowId + "_shield_at_mod");
variablesToGet.push("repeating_shields_" + activeShieldRowId + "_shield_pa_mod");
variablesToGet.push("repeating_shields_" + activeShieldRowId + "_shield_type");
} else {
console.log("no active shield found");
setAttrs({ shield_at_available: "0", shield_at: 0 });
return;
}
getAttrs(variablesToGet, function(values) {
let result = calculateShieldAttack(values, activeShieldRowId);
setAttrs({ shield_at: result.shieldAt, shield_at_available: result.shieldAtAvailable });
});
});
});
function calculateShieldAttack(values, activeShieldRowId) {
var shieldAt = 0;
var schildkampfI = values["sf_schildkampfI"];
if (activeShieldRowId && schildkampfI === "1" && values["repeating_shields_" + activeShieldRowId + "_shield_type"] === "shield") {
var schildkampfII = values["sf_schildkampfII"];
var knaufschlag = values["sf_knaufschlag"];
var schmutzigeTricks = values["sf_schmutzigetricks"];
shieldAt = parseInt(values["AT_raufen"]);
if (values["repeating_shields_" + activeShieldRowId + "_shield_at_mod"]) {
shieldAt += parseInt(values["repeating_shields_" + activeShieldRowId + "_shield_at_mod"]);
}
if (schildkampfII !== "1" && knaufschlag !== "1" && schmutzigeTricks !== "1") {
shieldAt -= 3;
}
let kkDifference = parseInt(values["kk"]) - 13;
var tpkkMod = Math.floor(Math.abs(kkDifference) / 3);
if (kkDifference < 0) {
shieldAt -= tpkkMod;
}
if (shieldAt < 0) {
shieldAt = 0;
}
}
var shieldAtAvailable = shieldAt > 0 ? "on" : "0";
return {shieldAt: shieldAt, shieldAtAvailable: shieldAtAvailable };
}
</script>