mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-09-04 14:12:28 +00:00
first works on shield attack support
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user